Index: s10k/Vago/Vago.pro
===================================================================
--- s10k/Vago/Vago.pro	(revision 1092)
+++ s10k/Vago/Vago.pro	(revision 1092)
@@ -0,0 +1,154 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2012-07-07T18:13:16
+#
+#-------------------------------------------------
+
+QT       += widgets
+QT       += network #network communication
+QT       += script #for json parse
+win32 {
+QT       += winextras
+}
+CONFIG   += c++14
+
+INCLUDEPATH += ./packageWizard
+INCLUDEPATH += ./soundWizard
+INCLUDEPATH += ./bgImageWizard
+INCLUDEPATH += ./bgImageWizard
+INCLUDEPATH += ./xmlToolsInterface
+INCLUDEPATH += ./windowMessagesWizard
+
+# Used this great tutorial to build zlib and quazip:
+# http://www.antonioborondo.com/2014/10/22/zipping-and-unzipping-files-with-qt/
+INCLUDEPATH += ../Libs/zlib-1.2.8
+LIBS += -L../Libs/zlib-1.2.8 -lz
+INCLUDEPATH += ../Libs/quazip-0.7.2/quazip
+win32 {
+LIBS += -L../Libs/quazip-0.7.2/quazip/release -lquazip
+}
+macx {
+LIBS += -L../Libs/quazip-0.7.2/quazip -lquazip
+}
+
+macx {
+LIBS += -lz # for mac support zipping (thanks edt!)
+ICON = vago_icon.icns # mac os icon
+}
+
+INCLUDEPATH += ./libs/DropTableWidget
+INCLUDEPATH += ./libs/DropLineEdit
+INCLUDEPATH += ../Libs/pugixml
+
+win32 {
+RC_FILE = icon_resource.rc #for windows explorer icon
+}
+
+TARGET = Vago
+TEMPLATE = app
+
+SOURCES += \
+    util.cpp \
+    preferences.cpp \
+    manualcommands.cpp \
+    mainwindow.cpp \
+    main.cpp \
+    logger.cpp \
+    converter.cpp \
+    about.cpp \
+    packageWizard/packagewizard.cpp \
+    packageWizard/packagepagefinal.cpp \
+    packageWizard/packagepage4.cpp \
+    packageWizard/packagepage3.cpp \
+    packageWizard/packagepage2.cpp \
+    soundWizard/soundpage2.cpp \
+    soundWizard/soundpage3.cpp \
+    soundWizard/soundpage4.cpp \
+    soundWizard/soundpage5.cpp \
+    soundWizard/soundpagefinal.cpp \
+    soundWizard/soundwizard.cpp \
+    bgImageWizard/bgimagepage2.cpp \
+    xmlprocessor.cpp \
+    utilvago.cpp \
+    bgImageWizard/bgimagewizard.cpp \
+    bgImageWizard/bgimagepage3.cpp \
+    bgImageWizard/bgimagepagefinal.cpp \
+    xmlToolsInterface/xmltoolsinterface.cpp \
+    libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.cpp \
+    xmlToolsInterface/xmltoolsinterfacecommandpreview.cpp \
+    libs/LineNumberDisplay/LineNumberDisplay.cpp \
+    abstractwizard.cpp \
+    windowMessagesWizard/wmsetuppage.cpp \
+    windowMessagesWizard/wmformatpage.cpp \
+    windowMessagesWizard/wmpage.cpp \
+    windowMessagesWizard/wmwizard.cpp \
+    windowMessagesWizard/wmfinalpage.cpp \
+    ./libs/DropTableWidget/droptablewidget.cpp \
+    ./libs/DropLineEdit/droplineedit.cpp \
+    ../Libs/pugixml/pugixml.cpp
+
+HEADERS  += \
+    util.h \
+    preferences.h \
+    manualcommands.h \
+    mainwindow.h \
+    logger.h \
+    converter.h \
+    about.h \
+    packageWizard/packagewizard.h \
+    packageWizard/packagepagefinal.h \
+    packageWizard/packagepage4.h \
+    packageWizard/packagepage3.h \
+    packageWizard/packagepage2.h \
+    soundWizard/soundpage2.h \
+    soundWizard/soundpage3.h \
+    soundWizard/soundpage4.h \
+    soundWizard/soundpage5.h \
+    soundWizard/soundpagefinal.h \
+    soundWizard/soundwizard.h \
+    bgImageWizard/bgimagepage2.h \
+    xmlprocessor.h \
+    utilvago.h \
+    bgImageWizard/bgimagewizard.h \
+    bgImageWizard/bgimagepage3.h \
+    bgImageWizard/bgimagepagefinal.h \
+    xmlToolsInterface/xmltoolsinterface.h \
+    libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.h \
+    xmlToolsInterface/xmltoolsinterfacecommandpreview.h \
+    libs/LineNumberDisplay/LineNumberDisplay.h \
+    wizardfactory.h \
+    abstractwizard.h \
+    windowMessagesWizard/wmsetuppage.h \
+    windowMessagesWizard/wmformatpage.h \
+    windowMessagesWizard/wmpage.h \
+    windowMessagesWizard/wmwizard.h \
+    windowMessagesWizard/wmfinalpage.h \
+    ./libs/DropTableWidget/droptablewidget.h \
+    ./libs/DropLineEdit/droplineedit.h \
+    ../Libs/pugixml/pugixml.hpp
+
+FORMS    += \
+    mainwindow.ui \
+    preferences.ui \
+    manualcommands.ui \
+    about.ui \
+    packageWizard/packagepagefinal.ui \
+    packageWizard/packagepage4.ui \
+    packageWizard/packagepage3.ui \
+    packageWizard/packagepage2.ui \
+    soundWizard/soundpage2.ui \
+    soundWizard/soundpage3.ui \
+    soundWizard/soundpage4.ui \
+    soundWizard/soundpage5.ui \
+    soundWizard/soundpagefinal.ui \
+    bgImageWizard/bgimagepage2.ui \
+    bgImageWizard/bgimagepage3.ui \
+    bgImageWizard/bgimagepagefinal.ui \
+    xmlToolsInterface/xmltoolsinterface.ui \
+    xmlToolsInterface/xmltoolsinterfacecommandpreview.ui \
+    windowMessagesWizard/wmsetuppage.ui \
+    windowMessagesWizard/wmformatpage.ui \
+    windowMessagesWizard/wmfinalpage.ui
+
+RESOURCES += \
+    resources.qrc \
Index: s10k/Vago/about.cpp
===================================================================
--- s10k/Vago/about.cpp	(revision 1092)
+++ s10k/Vago/about.cpp	(revision 1092)
@@ -0,0 +1,59 @@
+#include "about.h"
+#include "ui_about.h"
+
+About::About(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::About)
+{
+    ui->setupUi(this);
+    this->setAttribute(Qt::WA_DeleteOnClose,true ); //destroy itself once finished.
+    ui->lbAbout->setText("<html>"
+                         "<p style='font-size:x-large;'><b>Vago GUI " + GlobalVars::AppVersion + "</b></p>"
+                         "<p style='font-size:large;line-height: 18px;'>"
+                         "Written by s10k<br /><br/>"
+                         "Build Date " + __DATE__ + " " + __TIME__ + "<br /><br />"
+                         "Thanks to:<br/>"
+                         "Neo for OniSplit<br />"
+                         "EdT for testing, suggestions and icon<br />"
+                         "Iritscen for testing, bugfixing and suggestions<br />"
+                         "demos_kratos for original OniSplit GUI<br />"
+                         "Samer/Mukade/EdT for allow me to use Jubei as icon<br />"
+                         "Alloc for AIE2 and support<br />"
+                         "Paradox for Sound documentation and testing<br />"
+                         "Wiki contributors for the documentation<br />"
+                         "AE contributors<br />"
+                         "and in general to all OniCentral Community<br /><br/>"
+                         "Also thanks to: <br />"
+                         "StackOverflow Community<br />"
+                         "Sergey A. Tachenov for the QuaZIP library<br />"
+                         "Antonio Borondo for the documentation how to setup QuaZIP<br />"
+                         "Arseny Kapoulkine (and contributors)for pugixml library<br />"
+                         "smashingmagazine for the folder icon :)<br />"
+                         "Freepik and Flaticon by the background image wizard and text editing icons<br />"
+                         "qtiplot authors for line numbers in QTextEdit<br />"
+                         "d1vanov for basic-xml-syntax-highlighter class <br />"
+                         "</p>"
+                         "</html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+
+    ui->lbOniCommunity->setText("<html>"
+                                "<p style='font-size:large;'>"
+                                "<center>"
+                                "Visit us at:<br />"
+                                "<a href='http://oni.bungie.org'>"
+                                "oni.bungie.org"
+                                "</a>"
+                                "</center>"
+                                "</p>"
+                                "</html>"
+                                );
+}
+
+About::~About()
+{
+    delete ui;
+}
+
+void About::on_pushButton_clicked()
+{
+    this->close();
+}
Index: s10k/Vago/about.h
===================================================================
--- s10k/Vago/about.h	(revision 1092)
+++ s10k/Vago/about.h	(revision 1092)
@@ -0,0 +1,27 @@
+#ifndef ABOUT_H
+#define ABOUT_H
+
+#include <QDialog>
+
+#include "utilvago.h"
+
+namespace Ui {
+class About;
+}
+
+class About : public QDialog
+{
+    Q_OBJECT
+    
+public:
+    explicit About(QWidget *parent = 0);
+    ~About();
+    
+private slots:
+    void on_pushButton_clicked();
+
+private:
+    Ui::About *ui;
+};
+
+#endif // ABOUT_H
Index: s10k/Vago/about.ui
===================================================================
--- s10k/Vago/about.ui	(revision 1092)
+++ s10k/Vago/about.ui	(revision 1092)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>About</class>
+ <widget class="QDialog" name="About">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>700</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>About Vago GUI</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <item>
+    <widget class="QLabel" name="lbImage">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="resources.qrc">:/new/about/about.png</pixmap>
+     </property>
+     <property name="scaledContents">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QScrollArea" name="scrollArea">
+         <property name="widgetResizable">
+          <bool>true</bool>
+         </property>
+         <widget class="QWidget" name="scrollAreaWidgetContents">
+          <property name="geometry">
+           <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>431</width>
+            <height>348</height>
+           </rect>
+          </property>
+          <layout class="QVBoxLayout" name="verticalLayout_3">
+           <item>
+            <widget class="QLabel" name="lbAbout">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Vago GUI&lt;/span&gt; &lt;/p&gt;
+&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Written by s10k&lt;br /&gt;&lt;br /&gt;Thanks to:&lt;br /&gt;Edit in About.cpp&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+             </property>
+             <property name="wordWrap">
+              <bool>true</bool>
+             </property>
+             <property name="openExternalLinks">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>10</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QLabel" name="lbOniCommunity">
+         <property name="text">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Visit us at:&lt;br/&gt;&lt;a href=&quot;http://oni.bungie.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;oni.bungie.org &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+         <property name="openExternalLinks">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>10</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton">
+         <property name="minimumSize">
+          <size>
+           <width>100</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Close</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/abstractwizard.cpp
===================================================================
--- s10k/Vago/abstractwizard.cpp	(revision 1092)
+++ s10k/Vago/abstractwizard.cpp	(revision 1092)
@@ -0,0 +1,80 @@
+#include "abstractwizard.h"
+
+AbstractWizard::AbstractWizard(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger, const bool hasRestartButton)
+{
+    this->appDir = appDir;
+    this->workspaceWizardLocation=workspaceWizardLocation;
+    this->vagoSettings=vagoSettings;
+    this->myLogger=myLogger;
+    this->hasRestartButton = hasRestartButton;
+    this->myWizard.setWindowFlags(Qt::Window); // add minimize button in QWizard
+}
+
+void AbstractWizard::showWizard(const QString &windowsTitle, const QString &windowsIcon){
+    // Connect finished signal to our function
+    QObject::connect(&myWizard, SIGNAL(finished(int)), this, SLOT(wizardFinished(int)));
+
+    // If it has a restart button setup it
+    if(this->hasRestartButton){
+        QPushButton *restartButton = new QPushButton("Restart");
+        this->myWizard.setButton(QWizard::CustomButton1,restartButton);
+        this->myWizard.setOption(QWizard::HaveCustomButton1, true);
+
+        connect(&this->myWizard, SIGNAL(currentIdChanged(int)), this, SLOT(pageChanged(int)));
+        connect(restartButton, SIGNAL(clicked(bool)), this, SLOT(restartWizard()));
+    }
+
+    myWizard.setWindowIcon(QIcon(windowsIcon));
+    myWizard.setWindowTitle(windowsTitle);
+
+    //Center and resize QWizard (http://www.thedazzlersinc.com/source/2012/06/04/qt-center-window-in-screen/)
+#ifdef Q_OS_WIN
+    myWizard.resize(640,480);
+#else
+    myWizard.resize(800,600); // Mac OS pcs should be able to render this resolution without any problem. It's also better
+    // because the components on mac use more space
+#endif
+    QRect position = myWizard.frameGeometry();
+    position.moveCenter(QDesktopWidget().availableGeometry().center());
+    myWizard.move(position.topLeft());
+    //
+
+    // Show non modal window
+    myWizard.show();
+}
+
+QWizardPage* AbstractWizard::createIntroPage(const QString &text) {
+    QWizardPage *page = new QWizardPage;
+    page->setTitle("Introduction");
+
+    QLabel *label = new QLabel(text);
+    label->setWordWrap(true);
+
+    QVBoxLayout *layout = new QVBoxLayout;
+    layout->addWidget(label);
+    page->setLayout(layout);
+
+    return page;
+}
+
+void AbstractWizard::wizardFinished(int resultStatus){
+    beforeClose(static_cast<QDialog::DialogCode>(resultStatus));
+
+    // delete itself
+    delete this;
+}
+
+void AbstractWizard::restartWizard(){
+    this->myWizard.restart();
+}
+
+void AbstractWizard::pageChanged(int pageId){
+    // Last page?
+    if(pageId==this->myWizard.pageIds().size()-1){
+        this->myWizard.setOption(QWizard::HaveCustomButton1, true); // set visible
+        this->myWizard.button(QWizard::BackButton)->setEnabled(false); // disable back button, use restart if needed
+        return;
+    }
+    this->myWizard.setOption(QWizard::HaveCustomButton1, false); // set invisible
+    this->myWizard.button(QWizard::BackButton)->setEnabled(true); // set enable back button
+}
Index: s10k/Vago/abstractwizard.h
===================================================================
--- s10k/Vago/abstractwizard.h	(revision 1092)
+++ s10k/Vago/abstractwizard.h	(revision 1092)
@@ -0,0 +1,43 @@
+#ifndef ABSTRACTWIZARD_H
+#define ABSTRACTWIZARD_H
+
+#include "logger.h"
+
+#include <QLabel>
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QRect>
+#include <QDesktopWidget>
+#include <QTextStream>
+#include <QSettings>
+#include <QWizard>
+#include <QIcon>
+#include <QPushButton>
+
+// This abstract class allow us to re-use most of the code used in wizards.
+// To create wizard use the WizardFactory class available in "wizardfactory.h"
+class AbstractWizard: public QObject // for signals and slots
+{
+    Q_OBJECT // for signals and slots
+protected:
+	QWizard myWizard;
+    QString workspaceWizardLocation;
+	QSettings *vagoSettings;
+	Logger *myLogger;
+    QString appDir;
+protected:
+    AbstractWizard(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger, const bool hasRestartButton);
+    virtual void exec()=0;
+	void showWizard(const QString &windowsTitle, const QString &windowsIcon);
+    QWizardPage* createIntroPage(const QString &text);
+    virtual void beforeClose(QDialog::DialogCode resultStatus)=0;
+protected slots:
+    void wizardFinished(int resultStatus);
+private:
+    bool hasRestartButton;
+private slots:
+    void pageChanged(int pageId);
+    void restartWizard();
+};
+
+#endif // ABSTRACTWIZARD_H
Index: s10k/Vago/bgImageWizard/bgimagepage2.cpp
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepage2.cpp	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepage2.cpp	(revision 1092)
@@ -0,0 +1,125 @@
+#include "bgimagepage2.h"
+#include "ui_bgimagepage2.h"
+
+BGImagePage2::BGImagePage2(Logger *myLogger, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::BGImagePage2)
+{
+    ui->setupUi(this);
+    this->myLogger = myLogger;
+
+    this->setTitle("Image to use as background");
+    this->setSubTitle("Add here the image that you want to convert. Image width and height must be greater than or equal 256 pixels. Example of valid image resolutions: 640x480, 1024x768.");
+
+    //Register fields
+    registerField("leImageFullPath", ui->leImageFullPath);
+    registerField("lbImageType", ui->lbImageType, "text");
+}
+
+void BGImagePage2::initializePage()
+{
+    // To the first time the page is displayed and when the wizard is restarted
+    if(ui->leImageFullPath->text().isEmpty()){
+        // enable / hide image fields until we have an image
+        ui->gbImageInformation->setEnabled(false);
+        ui->lbImagePreview->hide();
+        ui->lbImageName->hide();
+        ui->lbImageWidth->hide();
+        ui->lbImageHeight->hide();
+        ui->lbImageSize->hide();
+        ui->lbDateCreated->hide();
+        ui->lbDateModified->hide();
+        ui->lbImageType->hide();
+    }
+}
+
+bool BGImagePage2::validatePage(){
+    QString leImageFullPath=ui->leImageFullPath->text().trimmed();
+
+    if(!validateField(leImageFullPath)){
+        return false;
+    }
+
+    return true;
+}
+
+bool BGImagePage2::validateField(QString &field){
+    if(field.isEmpty()){
+        Util::showErrorPopUp("You need to choose an image.");
+        return false;
+    }
+
+    return true;
+}
+
+BGImagePage2::~BGImagePage2()
+{
+    delete ui;
+}
+
+void BGImagePage2::on_pbBrowse_clicked()
+{
+    QString selectedImage = QFileDialog::getOpenFileName(this,"Choose the image file...","./" , "Image (*.JPG *.JPEG *.PNG)");
+
+    if(!selectedImage.isEmpty()){
+
+        QImage myImage;
+        if(!myImage.load(selectedImage)){
+            UtilVago::showAndLogErrorPopUp(this->myLogger,"Couldn't load image '" + Util::cutNameWithoutBackSlash(selectedImage) + "'. Is the image corrupt?");
+            return;
+        }
+
+        if(myImage.width() < 256 || myImage.height() < 256){
+            UtilVago::showAndLogErrorPopUp(this->myLogger,"Image '" + Util::cutNameWithoutBackSlash(selectedImage) +
+                                           "' does not have a width and height >= 256.");
+            return;
+        }
+
+        ui->leImageFullPath->setText(selectedImage);
+        ui->leImageFullPath->setToolTip(selectedImage);
+        setImage(selectedImage, myImage);
+    }
+}
+
+void BGImagePage2::setImage(const QString &imagePath, const QImage &image){
+
+    QFileInfo myImageFileInfo(imagePath);
+
+    ui->gbImageInformation->setEnabled(true);
+    ui->lbImagePreview->show();
+    ui->lbImageName->show();
+    ui->lbImageWidth->show();
+    ui->lbImageHeight->show();
+    ui->lbImageSize->show();
+    ui->lbDateCreated->show();
+    ui->lbDateModified->show();
+    ui->lbImageType->show();
+
+    QPixmap previewImage(imagePath);
+    ui->lbImagePreview->setPixmap( previewImage );
+    ui->lbImagePreview->setMask(previewImage.mask());
+
+    // Thanks bukkfa!
+    // http://stackoverflow.com/questions/5653114/display-image-in-qt-to-fit-label-size
+    ui->lbImagePreview->setScaledContents( true );
+    ui->lbImagePreview->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored );
+
+    // Update image information
+    QString imageName = myImageFileInfo.baseName().replace("." + myImageFileInfo.suffix(), "");
+
+    ui->lbImageName->setToolTip(imageName);
+
+    if(imageName.length() > 30){
+        imageName = imageName.mid(0,27) + "...";
+    }
+
+    ui->lbImageName->setText(imageName);
+    ui->lbImageWidth->setText(QString::number(image.width()));
+    ui->lbImageHeight->setText(QString::number(image.height()));
+    ui->lbImageType->setText(myImageFileInfo.suffix());
+    ui->lbImageSize->setText(QString::number(myImageFileInfo.size()/1024.0));
+    ui->lbDateCreated->setText(myImageFileInfo.created().toString());
+    ui->lbDateModified->setText(myImageFileInfo.lastModified().toString());
+
+    ui->lbImagePreview->show();
+}
Index: s10k/Vago/bgImageWizard/bgimagepage2.h
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepage2.h	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepage2.h	(revision 1092)
@@ -0,0 +1,35 @@
+#ifndef BGIMAGEPAGE2_H
+#define BGIMAGEPAGE2_H
+
+#include <QWizardPage>
+#include <QBitmap>
+
+#include "utilvago.h"
+#include "logger.h"
+
+namespace Ui {
+class BGImagePage2;
+}
+
+class BGImagePage2 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit BGImagePage2(Logger *myLogger, QWidget *parent = 0);
+    ~BGImagePage2();
+    
+private slots:
+    void on_pbBrowse_clicked();
+
+private:
+    Logger *myLogger;
+
+    Ui::BGImagePage2 *ui;
+    bool validateField(QString &field);
+    bool validatePage();
+    void setImage(const QString &imagePath, const QImage &image);
+    void initializePage();
+};
+
+#endif // BGIMAGEPAGE2_H
Index: s10k/Vago/bgImageWizard/bgimagepage2.ui
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepage2.ui	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepage2.ui	(revision 1092)
@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BGImagePage2</class>
+ <widget class="QWizardPage" name="BGImagePage2">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>558</width>
+    <height>323</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLineEdit" name="leImageFullPath">
+       <property name="readOnly">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pbBrowse">
+       <property name="text">
+        <string>Browse...</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="gbImageInformation">
+     <property name="minimumSize">
+      <size>
+       <width>500</width>
+       <height>230</height>
+      </size>
+     </property>
+     <property name="title">
+      <string>Image Information</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_3">
+      <item>
+       <widget class="QGroupBox" name="groupBox_2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>250</width>
+          <height>128</height>
+         </size>
+        </property>
+        <property name="title">
+         <string>Preview</string>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QLabel" name="lbImagePreview">
+           <property name="text">
+            <string>Image Preview</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item>
+       <widget class="QGroupBox" name="groupBox_3">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>250</width>
+          <height>128</height>
+         </size>
+        </property>
+        <property name="title">
+         <string>Details</string>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
+          <layout class="QFormLayout" name="formLayout">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_3">
+             <property name="text">
+              <string>Name:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbImageName">
+             <property name="text">
+              <string>ImageName</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QFormLayout" name="formLayout_2">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label">
+             <property name="text">
+              <string>Width:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbImageWidth">
+             <property name="text">
+              <string>ImageWidth</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_3">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QFormLayout" name="formLayout_3">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_2">
+             <property name="text">
+              <string>Height:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbImageHeight">
+             <property name="text">
+              <string>ImageHeight</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_5">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QFormLayout" name="formLayout_4">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_4">
+             <property name="text">
+              <string>Type:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbImageType">
+             <property name="text">
+              <string>ImageType</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_4">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QFormLayout" name="formLayout_7">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_7">
+             <property name="text">
+              <string>Size (kb):</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbImageSize">
+             <property name="text">
+              <string>ImageSize</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_7">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QFormLayout" name="formLayout_5">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_5">
+             <property name="text">
+              <string>Date Created:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbDateCreated">
+             <property name="text">
+              <string>DateCreated</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_6">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QFormLayout" name="formLayout_6">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_6">
+             <property name="text">
+              <string>Date Modified:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="lbDateModified">
+             <property name="text">
+              <string>DateModified</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/bgImageWizard/bgimagepage3.cpp
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepage3.cpp	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepage3.cpp	(revision 1092)
@@ -0,0 +1,149 @@
+#include "bgimagepage3.h"
+#include "ui_bgimagepage3.h"
+
+BGImagePage3::BGImagePage3(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::BGImagePage3)
+{
+    ui->setupUi(this);
+
+    //Register fields
+    registerField("cbCreateTXMB", ui->cbCreateTXMB);
+    registerField("cbCreateTXMP", ui->cbCreateTXMP);
+    registerField("leLevelId", ui->leLevelId);
+    registerField("leImageName", ui->leImageName);
+    registerField("leTXMBName", ui->leTXMBName);
+}
+
+BGImagePage3::~BGImagePage3()
+{
+    delete ui;
+}
+
+void BGImagePage3::initializePage()
+{
+    // To the first time the page is displayed and when the wizard is restarted
+    generateImageName();
+}
+
+void BGImagePage3::on_cbCreateTXMP_toggled(bool checked)
+{
+    if(!checked){
+        ui->cbCreateTXMB->setDisabled(true);
+        ui->cbCreateTXMB->setChecked(false);
+    }
+    else{
+        ui->cbCreateTXMB->setDisabled(false);
+    }
+
+}
+
+void BGImagePage3::on_cbCreateTXMB_toggled(bool checked)
+{
+    if(!checked){
+        ui->leTXMBName->setDisabled(true);
+        ui->leTXMBName->clear();
+    }
+    else{
+        ui->leTXMBName->setDisabled(false);
+    }
+}
+
+void BGImagePage3::on_leLevelId_textChanged(const QString &arg1)
+{
+    if(!arg1.isEmpty() && !Util::isStringInteger(arg1)){
+        Util::showErrorPopUp("Level id must be a number.");
+        ui->leLevelId->clear();
+        return;
+    }
+
+    if(!arg1.trimmed().isEmpty()){
+        generateImageName();
+    }
+}
+
+void BGImagePage3::on_cbTargetForImage_currentIndexChanged(const QString)
+{
+    generateImageName();
+}
+
+void BGImagePage3::generateImageName(){
+
+    QString type = ui->cbTargetForImage->currentText();
+    QString backgroundName;
+    QString txmbName;
+    QString levelNumber = "00";
+
+    if(ui->leLevelId->text().length() == 1){
+        levelNumber = ("0" + ui->leLevelId->text());
+    }
+    else if(ui->leLevelId->text().length() > 1){
+        levelNumber = ui->leLevelId->text();
+    }
+
+    if(type == "Other"){
+        backgroundName = "TXMPother";
+        txmbName = "TXMBother";
+        ui->leLevelId->clear();
+        ui->leLevelId->setEnabled(false);
+    }
+    else if(type == "Intro Screen"){
+        backgroundName = "TXMPlevel" + levelNumber + "_intro_";
+        txmbName = "TXMBintro_splash_screen";
+        ui->leLevelId->setEnabled(true);
+    }
+    else if(type == "Win Screen"){
+        backgroundName = "TXMPlevel" + levelNumber + "_win_";
+        txmbName = "TXMBwin_splash_screen";
+        ui->leLevelId->setEnabled(true);
+    }
+    else if(type == "Loose Screen"){
+        backgroundName = "TXMPfail01_";
+        txmbName = "TXMBfail_splash_screen";
+        ui->leLevelId->clear();
+        ui->leLevelId->setEnabled(false);
+    }
+    else if(type == "Main Menu Screen"){
+        backgroundName = "TXMPOni_startup_";
+        txmbName = "TXMBpict_mainmenu";
+        ui->leLevelId->clear();
+        ui->leLevelId->setEnabled(false);
+    }
+    else if(type == "Options Menu Screen"){
+        backgroundName = "TXMPoptions_";
+        txmbName = "TXMBpict_options_background";
+        ui->leLevelId->clear();
+        ui->leLevelId->setEnabled(false);
+    }
+    else if(type == "Load Level Screen"){
+        backgroundName = "TXMPoni_kanji_";
+        txmbName = "TXMBpict_loadgame_background";
+        ui->leLevelId->clear();
+        ui->leLevelId->setEnabled(false);
+    }
+
+    ui->leImageName->setText(backgroundName);
+
+    if(ui->cbCreateTXMB->isChecked()){
+        ui->leTXMBName->setText(txmbName);
+    }
+}
+
+
+bool BGImagePage3::validatePage(){
+
+    QStringList namesList;
+
+    if(ui->leImageName->text().trimmed().isEmpty()){
+        Util::showErrorPopUp("You need to input a name to the image!");
+        return false;
+    }
+
+    if(ui->cbCreateTXMB->isChecked() && ui->leTXMBName->text().trimmed().isEmpty()){
+        Util::showErrorPopUp("You need to input a name to the TXMB file!");
+        return false;
+    }
+
+    return true;
+}
+
Index: s10k/Vago/bgImageWizard/bgimagepage3.h
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepage3.h	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepage3.h	(revision 1092)
@@ -0,0 +1,36 @@
+#ifndef BGIMAGEPAGE3_H
+#define BGIMAGEPAGE3_H
+
+#include <QWizardPage>
+#include "util.h"
+
+namespace Ui {
+class BGImagePage3;
+}
+
+class BGImagePage3 : public QWizardPage
+{
+    Q_OBJECT
+
+public:
+    explicit BGImagePage3(QWidget *parent = 0);
+    ~BGImagePage3();
+
+private slots:
+    void on_cbCreateTXMP_toggled(bool checked);
+
+    void on_leLevelId_textChanged(const QString &arg1);
+
+    void on_cbTargetForImage_currentIndexChanged(const QString);
+
+    void on_cbCreateTXMB_toggled(bool checked);
+
+private:
+    Ui::BGImagePage3 *ui;
+
+    void generateImageName();
+    void initializePage();
+    bool validatePage();
+};
+
+#endif // BGIMAGEPAGE3_H
Index: s10k/Vago/bgImageWizard/bgimagepage3.ui
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepage3.ui	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepage3.ui	(revision 1092)
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BGImagePage3</class>
+ <widget class="QWizardPage" name="BGImagePage3">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>188</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QFormLayout" name="formLayout_2">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout_3">
+     <item>
+      <widget class="QCheckBox" name="cbCreateTXMP">
+       <property name="toolTip">
+        <string>Check to create the TXMP files directly from the generated images files</string>
+       </property>
+       <property name="text">
+        <string>Create TXMP files</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="cbCreateTXMB">
+       <property name="toolTip">
+        <string>Check to create the TXMB file</string>
+       </property>
+       <property name="text">
+        <string>Create TXMB file</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <layout class="QFormLayout" name="formLayout">
+     <item row="0" column="0">
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>Target for Image:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>Level Id:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="toolTip">
+          <string>Name of the image, TXMP and images files will use it</string>
+         </property>
+         <property name="text">
+          <string>Image Name:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_4">
+         <property name="toolTip">
+          <string>Name for the TXMB file</string>
+         </property>
+         <property name="text">
+          <string>TXMB Name:</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="0" column="1">
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="QComboBox" name="cbTargetForImage">
+         <property name="minimumSize">
+          <size>
+           <width>180</width>
+           <height>0</height>
+          </size>
+         </property>
+         <item>
+          <property name="text">
+           <string>Other</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Intro Screen</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Win Screen</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Loose Screen</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Main Menu Screen</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Options Menu Screen</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Load Level Screen</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="leLevelId">
+         <property name="minimumSize">
+          <size>
+           <width>180</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="leImageName">
+         <property name="minimumSize">
+          <size>
+           <width>180</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="leTXMBName">
+         <property name="minimumSize">
+          <size>
+           <width>180</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/bgImageWizard/bgimagepagefinal.cpp
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepagefinal.cpp	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepagefinal.cpp	(revision 1092)
@@ -0,0 +1,239 @@
+#include "BGImagePageFinal.h"
+#include "ui_BGImagePageFinal.h"
+
+BGImagePageFinal::BGImagePageFinal(QString appDir, Logger *myLogger, QString bgImagesLocation, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::BGImagePageFinal)
+{
+    ui->setupUi(this);
+    this->appDir = appDir;
+    this->myLogger = myLogger;
+    this->bgImagesLocation = bgImagesLocation;
+    this->oniSplitCommands = new QStringList();
+    this->myOniSplitConverter = new Converter(this->appDir, this->myLogger, this->oniSplitCommands);
+
+    ui->lbComplete->setText("<html>The wizard is now complete. The images have been created. "
+                            "You can view all created files clicking <a href=' '>here.</a><br />"
+                            "<br />Click restart to create more background images from the wizard beggining, "
+                            "otherwise click finish.</html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+
+    connectSlots();
+}
+
+void BGImagePageFinal::initializePage(){
+    startProcessing();
+}
+
+void BGImagePageFinal::startProcessing(){
+    // page 1
+    QString imagePath;
+    QString imageType;
+    // page 2
+    bool createTXMB;
+    bool createTXMP;
+    QString imageCustomName;
+    QString txmbName;
+    QString levelId;
+
+    imagePath = field("leImageFullPath").toString();
+    imageType = field("lbImageType").toString();
+    createTXMB = field("cbCreateTXMB").toBool();
+    createTXMP = field("cbCreateTXMP").toBool();
+    imageCustomName = field("leImageName").toString();
+    txmbName = field("leTXMBName").toString();
+    levelId = field("leLevelId").toString();
+
+
+    QImage sourceImage(imagePath);
+    QList<QString> imagesSplitted;
+
+    // Check if images folder exists and create it if necessary
+    QDir saveDir(this->bgImagesLocation);
+
+    if(!saveDir.exists())
+    {
+        saveDir.mkpath("."); // http://stackoverflow.com/questions/2241808/checking-if-a-folder-exists-and-creating-folders-in-qt-c thanks Petrucio
+    }
+
+    imagesSplitted = splitIntoMultipleImages(sourceImage, imageCustomName, imageType);
+
+    // Image divided with sucess
+    if(imagesSplitted.size() > 0 && createTXMP){
+
+        // call creations of TXMP files (oni split command)
+        this->oniSplitCommands->clear();
+
+        for(const QString &currentFile : imagesSplitted){
+            this->oniSplitCommands->append("-create:txmp " + Util::insertQuotes(this->bgImagesLocation) + " -format:bgr32 " + Util::insertQuotes(currentFile));
+        }
+
+        this->myOniSplitConverter->start(); // finally process the onisplit commands
+        this->myOniSplitConverter->wait(); // wait for it to complete
+
+        if(createTXMB){
+
+            QString txmbXmlFile = createTxmbXmlFile(imagesSplitted, txmbName, sourceImage.size(), levelId);
+
+            if(txmbXmlFile.isEmpty())
+            {
+                UtilVago::showAndLogErrorPopUp(this->myLogger, "Couldn't create TXMB xml file!");
+                return;
+            }
+
+            // Create TXMB oni files
+            this->oniSplitCommands->clear();
+            this->oniSplitCommands->append("-create " + Util::insertQuotes(this->bgImagesLocation) + " " + Util::insertQuotes(txmbXmlFile));
+            this->myOniSplitConverter->start();
+            this->myOniSplitConverter->wait();
+        }
+    }
+}
+
+QString BGImagePageFinal::createTxmbXmlFile(QList<QString> imagesSplitted, QString fileName, const QSize &imageSize, QString levelId){
+    QString filePath = this->bgImagesLocation + "/" + fileName + ".xml";
+
+    // If it's empty assume zero
+    if(levelId.trimmed().isEmpty()){
+        levelId = "0";
+    }
+
+    pugi::xml_document doc;
+
+    pugi::xml_node rootNode = doc.append_child("Oni");
+    pugi::xml_node txmbNode = rootNode.append_child("TXMB");
+    txmbNode.append_child("Width").append_child(pugi::xml_node_type::node_pcdata).set_value(QString::number(imageSize.width()).toLatin1().data());
+    txmbNode.append_child("Height").append_child(pugi::xml_node_type::node_pcdata).set_value(QString::number(imageSize.height()).toLatin1().data());
+    pugi::xml_node texturesNode = txmbNode.append_child("Textures");
+
+    for(const QString &currSplittedImage : imagesSplitted)
+    {
+        QFileInfo currImageFile(currSplittedImage);
+        texturesNode.append_child("Link").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(currImageFile.baseName()));
+    }
+
+    txmbNode.append_attribute("id").set_value(Util::qStrToCstr(levelId));
+
+    if(!doc.save_file(Util::qStrToCstr(filePath))){
+        return "";
+    }
+
+    return filePath;
+}
+
+// returns number of images created from the split
+QList<QString> BGImagePageFinal::splitIntoMultipleImages(QImage sourceImage, QString imageName, QString imageType){
+
+    QList<QString> splittedImages;
+
+    QVector<int> horizontalSideSizes = getSplitSizes(sourceImage.width());
+
+    QVector<int> verticalSideSizes = getSplitSizes(sourceImage.height());
+
+    int currentVerticalPosition = 0;
+    int currentHorizontalPosition = 0;
+
+    for(const int currentVerticalSize : verticalSideSizes){
+
+        for(const int currentHorizontalSize : horizontalSideSizes){
+
+            QImage dividedImage = sourceImage.copy(currentHorizontalPosition,currentVerticalPosition,currentHorizontalSize,currentVerticalSize);
+            QString currentImageId = QString::number(splittedImages.size()+1);
+
+            // Not used. It added 0 when the number was less than 10
+            //            if(currentImageId.length() == 1){
+            //                currentImageId = "0" + currentImageId;
+            //            }
+
+            QString imageDestinationPath = this->bgImagesLocation + "/" + imageName + currentImageId + "." + imageType;
+
+            if(!dividedImage.save(imageDestinationPath)){
+                UtilVago::showAndLogErrorPopUp(this->myLogger, "Couldn't save image " + imageDestinationPath + "! Files weren't created correctly.");
+                return QList<QString>();
+            }
+
+            currentHorizontalPosition += currentHorizontalSize;
+
+            splittedImages.append(imageDestinationPath);
+        }
+
+        currentHorizontalPosition = 0;
+        currentVerticalPosition += currentVerticalSize;
+    }
+
+    return splittedImages;
+}
+
+QVector<int> BGImagePageFinal::getSplitSizes(int imageSideSize)
+{
+    int remainingSideSize = imageSideSize;
+    constexpr int regularSize = 256;
+
+    QVector<int> splitSizes;
+
+    while(remainingSideSize > 0){
+
+        if(remainingSideSize-regularSize < 0){
+            splitSizes.append(remainingSideSize);
+            remainingSideSize -= remainingSideSize;
+            break;
+        }
+
+        splitSizes.append(regularSize);
+
+        remainingSideSize -= regularSize;
+
+    }
+
+    if(remainingSideSize != 0)
+    {
+        splitSizes.clear();
+    }
+
+    return splitSizes;
+}
+
+void BGImagePageFinal::openBGImagesFolder(){
+    QDesktopServices::openUrl(QUrl("file:///"+this->bgImagesLocation));
+}
+
+void BGImagePageFinal::catchOniSplitProcessingErrors(QString result, int numErrors){
+
+    if(numErrors!=0){
+        QString sNumErrors=QString::number(numErrors);
+        bool isWarning = false;
+
+
+        if(result.startsWith("Warning: Texture")){
+            isWarning = true;
+        }
+
+        if(numErrors>1){
+
+            result = result+"\n This is the last of " + sNumErrors;
+
+            if(!isWarning){
+                result += " errors.";
+            }
+            else{
+                result += " messages.";
+            }
+        }
+
+        if(isWarning){
+            UtilVago::showWarningPopUpLogButton(result);
+        }
+        else{
+            UtilVago::showErrorPopUpLogButton(result);
+        }
+    }
+}
+
+void BGImagePageFinal::connectSlots(){
+    connect(this->myOniSplitConverter, SIGNAL(resultConversion(QString, int)), this, SLOT(catchOniSplitProcessingErrors(QString, int)));
+    connect(ui->lbComplete, SIGNAL(linkActivated(const QString & )), this, SLOT(openBGImagesFolder()));
+}
+
+BGImagePageFinal::~BGImagePageFinal()
+{
+    delete ui;
+}
Index: s10k/Vago/bgImageWizard/bgimagepagefinal.h
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepagefinal.h	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepagefinal.h	(revision 1092)
@@ -0,0 +1,44 @@
+#ifndef BGIMAGEPAGEFINAL_H
+#define BGIMAGEPAGEFINAL_H
+
+#include <QWizardPage>
+#include <QImage>
+#include <pugixml.hpp>
+
+#include "utilvago.h"
+#include "converter.h"
+
+namespace Ui {
+class BGImagePageFinal;
+}
+
+class BGImagePageFinal : public QWizardPage
+{
+    Q_OBJECT
+
+public:
+    explicit BGImagePageFinal(QString appDir, Logger *myLogger, QString bgImagesLocation, QWidget *parent = 0);
+    ~BGImagePageFinal();
+
+private:
+    Ui::BGImagePageFinal *ui;
+    QString appDir;
+    QString bgImagesLocation;
+    Logger *myLogger;
+    Converter *myOniSplitConverter;
+    QStringList *oniSplitCommands;
+
+    void initializePage();
+    void startProcessing();
+
+    QVector<int> getSplitSizes(int imageSideSize);
+    QList<QString> splitIntoMultipleImages(QImage sourceImage, QString imageName, QString imageType);
+    QString createTxmbXmlFile(QList<QString> imagesSplitted, QString fileName, const QSize &imageSize, QString levelId);
+    void connectSlots();
+
+private slots:
+    void openBGImagesFolder();
+    void catchOniSplitProcessingErrors(QString result, int numErrors);
+};
+
+#endif // BGIMAGEPAGEFINAL_H
Index: s10k/Vago/bgImageWizard/bgimagepagefinal.ui
===================================================================
--- s10k/Vago/bgImageWizard/bgimagepagefinal.ui	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagepagefinal.ui	(revision 1092)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BGImagePageFinal</class>
+ <widget class="QWizardPage" name="BGImagePageFinal">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>150</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="lbComplete">
+     <property name="text">
+      <string>The wizard is now complete. Edit this text in bgimagepagefinal.cpp</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>30</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/bgImageWizard/bgimagewizard.cpp
===================================================================
--- s10k/Vago/bgImageWizard/bgimagewizard.cpp	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagewizard.cpp	(revision 1092)
@@ -0,0 +1,38 @@
+#include "bgimagewizard.h"
+
+BGImageWizard::BGImageWizard(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger)
+:AbstractWizard(appDir, workspaceWizardLocation, vagoSettings, myLogger, true)
+{
+    this->appDir = appDir;
+    this->workspaceWizardLocation=workspaceWizardLocation;
+    this->vagoSettings=vagoSettings;
+    this->myLogger=myLogger;
+    this->bgImagesLocation=this->workspaceWizardLocation+"/BGImages";
+}
+
+void BGImageWizard::exec(){
+
+    BGImagePage2 *page2 = new BGImagePage2(this->myLogger);
+    BGImagePage3 *page3 = new BGImagePage3();
+    BGImagePageFinal *pageFinal = new BGImagePageFinal(this->appDir, this->myLogger, this->bgImagesLocation);
+
+    this->myWizard.addPage
+    (
+        createIntroPage
+        (
+            "Welcome to the Oni Background Image Wizard.\n"
+            "This wizard will allow you to create in a few and simple steps Oni background images (TXMB) "
+            "that can be used in the menus or as backgrounds screens for the levels."
+        )
+    );
+
+    this->myWizard.addPage(page2);
+    this->myWizard.addPage(page3);
+    this->myWizard.addPage(pageFinal);
+
+    showWizard("Background Image Wizard", ":/new/icons/background_image.png");
+}
+
+void BGImageWizard::beforeClose(QDialog::DialogCode){
+
+}
Index: s10k/Vago/bgImageWizard/bgimagewizard.h
===================================================================
--- s10k/Vago/bgImageWizard/bgimagewizard.h	(revision 1092)
+++ s10k/Vago/bgImageWizard/bgimagewizard.h	(revision 1092)
@@ -0,0 +1,21 @@
+#ifndef BGIMAGEWIZARD_H
+#define BGIMAGEWIZARD_H
+
+// Local includes
+#include "abstractwizard.h"
+#include "bgimagepage2.h"
+#include "bgimagepage3.h"
+#include "bgimagepagefinal.h"
+
+class BGImageWizard: public AbstractWizard // for signals and slots
+{
+protected:
+    BGImageWizard(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger);
+    void exec();
+private:
+    QString bgImagesLocation;
+private:
+    void beforeClose(QDialog::DialogCode resultStatus);
+};
+
+#endif // BGIMAGEWIZARD_H
Index: s10k/Vago/converter.cpp
===================================================================
--- s10k/Vago/converter.cpp	(revision 1092)
+++ s10k/Vago/converter.cpp	(revision 1092)
@@ -0,0 +1,131 @@
+#include "converter.h"
+
+Converter::Converter(QString AppDir, Logger *myLogger, QStringList *myData)
+{
+    this->AppDir=AppDir;
+    this->myLogger=myLogger;
+    this->myData=myData;
+}
+
+#ifdef Q_OS_WIN
+Converter::Converter(QString AppDir, Logger *myLogger, QStringList *myData, QWinTaskbarProgress *win7TaskBarProgress)
+    : Converter(AppDir, myLogger, myData)
+{
+    this->win7TaskBarProgress = win7TaskBarProgress;
+}
+#endif
+
+void Converter::run()
+{
+    this->processHasKilled=false;
+    this->myProcess = new QProcess();
+    QString result = QString();
+    QString errorMessage = "";
+    int numErrors=0;
+
+    this->myLogger->writeString("Setting OniSplit process working dir to "+this->AppDir+".");
+    myProcess->setWorkingDirectory(this->AppDir); // Set working directory (for work with AEI2/Mac OS)
+
+#ifdef Q_OS_WIN
+    if(this->win7TaskBarProgress){
+        this->win7TaskBarProgress->reset();
+        this->win7TaskBarProgress->show();
+    }
+#endif
+
+    if(this->myData->size()!=1){
+#ifdef Q_OS_WIN
+        if(this->win7TaskBarProgress){
+            this->win7TaskBarProgress->setRange(0,this->myData->size());
+        }
+#endif
+        emit setupPB(this->myData->size());
+    }
+    else{
+#ifdef Q_OS_WIN
+        if(this->win7TaskBarProgress){
+            this->win7TaskBarProgress->setRange(0,0);
+        }
+#endif
+        emit setupPB(0); //Intermitent bar, we don't have any estimation when the task is done
+    }
+
+    for(int i=0; i<this->myData->size(); i++){
+
+        QString commands=this->myData->at(i);
+        QString commandToExec;
+
+        int currentIndex=0, nextIndex=0;
+
+        while(true){
+            nextIndex=commands.indexOf(GlobalVars::OniSplitProcSeparator,currentIndex+1);
+
+            commandToExec=commands.mid(currentIndex,(nextIndex-currentIndex));
+            this->myProcess->start(UtilVago::getOniSplitExecutable() + " " + commandToExec);
+            this->myProcess->waitForFinished(-1);
+
+            if(this->processHasKilled){ // If the process has killed there's no need to proceed with reading output or process more commands
+
+#ifdef Q_OS_WIN
+                if(this->win7TaskBarProgress){
+                    this->win7TaskBarProgress->hide();
+                }
+#endif
+
+                delete this->myProcess; //delete object and make pointer invalid
+                this->myData->clear(); //clean list
+                emit conversionAborted();
+
+                return;
+            }
+
+            result=this->myProcess->readAllStandardError();
+
+            if(!result.isEmpty()){ //if(!result.startsWith("Importing",Qt::CaseSensitive) && !result.startsWith("Importing",Qt::CaseSensitive)){ //case sensitive is faster
+                //catch exception
+                myLogger->writeString("Oni Split Error: \n"+this->myData->at(i)+"\n"+result);
+                errorMessage=result;
+                numErrors++;
+            }
+
+            if(nextIndex==-1){ //we got to the end, stop proccessing commands
+                break;
+            }
+            currentIndex=nextIndex+1; //update currentIndex +1 for start after the separator
+        }
+
+#ifdef Q_OS_WIN
+        if(this->win7TaskBarProgress){
+            this->win7TaskBarProgress->setValue(win7TaskBarProgress->value()+1);
+        }
+#endif
+
+        emit taskDone();
+    }
+
+#ifdef Q_OS_WIN
+    if(this->win7TaskBarProgress){
+        this->win7TaskBarProgress->hide();
+    }
+#endif
+
+    delete this->myProcess; //delete object and make pointer invalid
+    this->myData->clear(); //clean list
+
+    //let's cut it a bit, complete error is in log file.
+    if(errorMessage.size()>600){
+        //limit it at 400 characters (not counting the warning at the begin)
+        errorMessage.remove(299,errorMessage.size()-600);
+        errorMessage.insert(299,"\n \t ... \n");
+        errorMessage.insert(0,"This error was been shortened. \nSee the complete error at Vago log file.\n\n");
+    }
+
+    emit resultConversion(errorMessage,numErrors);
+}
+
+// Kill the process if requested
+void Converter::terminateCurrProcess(){
+    this->myProcess->kill();
+    this->processHasKilled=true;
+    this->myLogger->writeString("Received signal to kill current OniSplit operation (user requested).");
+}
Index: s10k/Vago/converter.h
===================================================================
--- s10k/Vago/converter.h	(revision 1092)
+++ s10k/Vago/converter.h	(revision 1092)
@@ -0,0 +1,44 @@
+#ifndef CONVERTER_H
+#define CONVERTER_H
+#include <QProcess>
+#include <QProgressBar>
+#include <QThread>
+#ifdef Q_OS_WIN
+#include <QWinTaskbarProgress>
+#endif
+
+#include "utilvago.h"
+
+class Converter : public QThread
+{
+     Q_OBJECT
+public:
+    Converter(QString AppDir, Logger *myLogger, QStringList *myData);
+
+    #ifdef Q_OS_WIN
+    Converter(QString AppDir, Logger *myLogger, QStringList *myData, QWinTaskbarProgress *win7TaskBarProgress);
+    #endif
+private:
+    QString AppDir;
+    Logger *myLogger;
+    QStringList *myData;
+    QProcess *myProcess;
+    bool processHasKilled;
+    #ifdef Q_OS_WIN
+    QWinTaskbarProgress *win7TaskBarProgress = nullptr;
+    #endif
+
+protected:
+    void run(); //for thread
+private slots:
+    void terminateCurrProcess();
+signals:
+    void setupPB(int numberTasks);
+    void taskDone();
+    void resultConversion(QString result, int numErrors);
+    void conversionAborted();
+};
+
+
+
+#endif // CONVERTER_H
Index: s10k/Vago/help/XMLSNDD.html
===================================================================
--- s10k/Vago/help/XMLSNDD.html	(revision 1092)
+++ s10k/Vago/help/XMLSNDD.html	(revision 1092)
@@ -0,0 +1,1364 @@
+<!DOCTYPE html>
+<!-- saved from url=(0029)http://wiki.oni2.net/XML:SNDD -->
+<html lang="en" dir="ltr" class="client-js" style="-webkit-user-select: text;"><head style="-webkit-user-select: text;"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title style="-webkit-user-select: text;">XML:SNDD - OniGalore</title>
+
+<meta name="generator" content="MediaWiki 1.19.2" style="-webkit-user-select: text;">
+<link rel="alternate" type="application/x-wiki" title="Edit" href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit" style="-webkit-user-select: text;">
+<link rel="edit" title="Edit" href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit" style="-webkit-user-select: text;">
+<link rel="shortcut icon" href="http://wiki.oni2.net/favicon.ico" style="-webkit-user-select: text;">
+<link rel="search" type="application/opensearchdescription+xml" href="http://wiki.oni2.net/w/opensearch_desc.php" title="OniGalore (en)" style="-webkit-user-select: text;">
+<link rel="EditURI" type="application/rsd+xml" href="http://wiki.oni2.net/w/api.php?action=rsd" style="-webkit-user-select: text;">
+<link rel="copyright" href="http://www.gnu.org/copyleft/fdl.html" style="-webkit-user-select: text;">
+<link rel="alternate" type="application/atom+xml" title="OniGalore Atom feed" href="http://wiki.oni2.net/w/index.php?title=Special:RecentChanges&amp;feed=atom" style="-webkit-user-select: text;">
+<link rel="stylesheet" href="./XMLSNDD_files/load.php" style="-webkit-user-select: text;">
+<style type="text/css" media="all" style="-webkit-user-select: text;">.js-messagebox{margin:1em 5%;padding:0.5em 2.5%;border:1px solid #ccc;background-color:#fcfcfc;font-size:0.8em}.js-messagebox .js-messagebox-group{margin:1px;padding:0.5em 2.5%;border-bottom:1px solid #ddd}.js-messagebox .js-messagebox-group:last-child{border-bottom:thin none transparent}
+
+/* cache key: oni_wiki:resourceloader:filter:minify-css:7:8b08bdc91c52a9ffba396dccfb5b473c */
+
+
+.mw-collapsible-toggle{float:right} li .mw-collapsible-toggle{float:none} .mw-collapsible-toggle-li{list-style:none}
+
+/* cache key: oni_wiki:resourceloader:filter:minify-css:7:4250852ed2349a0d4d0fc6509a3e7d4c */
+</style><meta name="ResourceLoaderDynamicStyles" content="" style="-webkit-user-select: text;">
+<link rel="stylesheet" href="./XMLSNDD_files/load(1).php" style="-webkit-user-select: text;">
+<style style="-webkit-user-select: text;">a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}a.new,#quickbar a.new{color:#ba0000}
+
+/* cache key: oni_wiki:resourceloader:filter:minify-css:7:c88e2bcd56513749bec09a7e29cb3ffa */
+</style>
+
+<script src="./XMLSNDD_files/load(2).php" style="-webkit-user-select: text;"></script><script src="./XMLSNDD_files/load(3).php" style="-webkit-user-select: text;"></script>
+<script style="-webkit-user-select: text;">if(window.mw){
+mw.config.set({"wgCanonicalNamespace":"XML","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":110,"wgPageName":"XML:SNDD","wgTitle":"SNDD","wgCurRevisionId":25591,"wgArticleId":4759,"wgIsArticle":true,"wgAction":"view","wgUserName":"Script 10k","wgUserGroups":["*","user","autoconfirmed"],"wgCategories":["Articles that need finishing","XML data docs"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgRelevantPageName":"XML:SNDD","wgRestrictionEdit":[],"wgRestrictionMove":[],"wgSearchNamespaces":[0,100,102,104,108,110],"wgCategoryTreePageCategoryOptions":"{\"mode\":20,\"hideprefix\":20,\"showcount\":true,\"namespaces\":false}"});
+}</script><script style="-webkit-user-select: text;">if(window.mw){
+mw.loader.implement("user.options",function($){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"0","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":1,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"highlightbroken":1,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":1,"showtoolbar":1,"skin":"vector","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
+"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"searchNs100":true,"searchNs101":false,"searchNs102":true,"searchNs103":false,"searchNs104":true,"searchNs105":false,"searchNs108":true,"searchNs109":false,"searchNs110":true,"searchNs111":false,"searchNs-1":"0","searchNs106":"1","searchNs107":"0","watchlisttoken":"792bb687f970780ab8efae83dbc62a988f4efce1"});;},{},{});mw.loader.implement("user.tokens",function($){mw.user.tokens.set({"editToken":"c08f1ac9c17fb24268eaa9fbc10859da+\\","watchToken":"eff14bb920245bf6e2b38662760b30a1+\\"});;},
+{},{});
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:cf16a59788b2fd441cb03d0c9d20778f */
+}</script>
+<script style="-webkit-user-select: text;">if(window.mw){
+mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
+}</script><script type="text/javascript" src="./XMLSNDD_files/load(4).php" style="-webkit-user-select: text;"></script>
+<!--[if lt IE 7]><style type="text/css">body{behavior:url("/w/skins/vector/csshover.min.htc")}</style><![endif]--></head>
+<body class="mediawiki ltr sitedir-ltr ns-110 ns-subject page-XML_SNDD skin-vector action-view" style="-webkit-user-select: text;">
+		<div id="mw-page-base" class="noprint" style="-webkit-user-select: text;"></div>
+		<div id="mw-head-base" class="noprint" style="-webkit-user-select: text;"></div>
+		<!-- content -->
+		<div id="content" class="mw-body" style="-webkit-user-select: text;">
+			<a id="top" style="-webkit-user-select: text;"></a>
+			<div id="mw-js-message" style="display: none; -webkit-user-select: text;" class="js-messagebox"></div>
+						<!-- firstHeading -->
+			<h1 id="firstHeading" class="firstHeading" style="-webkit-user-select: text;">
+				<span dir="auto" style="-webkit-user-select: text;">XML:SNDD</span>
+			</h1>
+			<!-- /firstHeading -->
+			<!-- bodyContent -->
+			<div id="bodyContent" style="-webkit-user-select: text;">
+								<!-- tagline -->
+				<div id="siteSub" style="-webkit-user-select: text;">From OniGalore</div>
+				<!-- /tagline -->
+								<!-- subtitle -->
+				<div id="contentSub" style="-webkit-user-select: text;"></div>
+				<!-- /subtitle -->
+																<!-- jumpto -->
+				<div id="jump-to-nav" class="mw-jump" style="-webkit-user-select: text;">
+					Jump to: <a href="http://wiki.oni2.net/XML:SNDD#mw-head" style="-webkit-user-select: text;">navigation</a>,
+					<a href="http://wiki.oni2.net/XML:SNDD#p-search" style="-webkit-user-select: text;">search</a>
+				</div>
+				<!-- /jumpto -->
+								<!-- bodycontent -->
+				<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr" style="-webkit-user-select: text;"><table class="wikitable" style="width: 100%; border-width: 4px 1px; border-style: solid; border-collapse: collapse; border-spacing: 0px; empty-cells: show; text-align: center; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<th style="width: 256px; -webkit-user-select: text;"> SNDD&nbsp;: Sound Data
+</th>
+<td rowspan="2" style="-webkit-user-select: text;">
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">XML modding tips</b>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> See <a href="http://wiki.oni2.net/XML" title="XML" class="mw-redirect" style="-webkit-user-select: text;">HERE</a> to start learning about XML modding.
+</li><li style="-webkit-user-select: text;"> See <a href="http://wiki.oni2.net/OBD_talk:BINA/OBJC" title="OBD talk:BINA/OBJC" style="-webkit-user-select: text;">HERE</a> if you are searching for information on how to handle object coordinates.
+</li><li style="-webkit-user-select: text;"> See <a href="http://wiki.oni2.net/Modding_errors" title="Modding errors" style="-webkit-user-select: text;">HERE</a> for some typical modding errors and their causes.
+</li></ul>
+</dd></dl>
+</td>
+<td rowspan="2" style="width: 128px; background-color: rgb(0, 0, 0); -webkit-user-select: text;"> <a href="http://wiki.oni2.net/File:XML.png" class="image" style="-webkit-user-select: text;"><img alt="XML.png" src="./XMLSNDD_files/XML.png" width="128" height="128" style="-webkit-user-select: text;"></a>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML" title="XML" class="mw-redirect" style="-webkit-user-select: text;">XML</a></b>
+<p style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML:PSUI&amp;action=edit&amp;redlink=1" class="new" title="XML:PSUI (page does not exist)" style="-webkit-user-select: text;">PSUI</a> &lt;&lt; <a href="http://wiki.oni2.net/XML:File_types" title="XML:File types" style="-webkit-user-select: text;">Other file types</a> &gt;&gt; <a href="http://wiki.oni2.net/XML:TRAC" title="XML:TRAC" style="-webkit-user-select: text;">TRAC</a>
+</p><p style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/OBD:SNDD" title="OBD:SNDD" style="-webkit-user-select: text;">switch to OBD page</a>
+</p>
+</td></tr></tbody></table>
+<table cellpadding="0" style="border: 1px solid black; border-spacing: 0px; padding: 0px; empty-cells: show; margin-left: auto; margin-right: auto; text-align: center; width: 700pt; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<td style="background-color: gray; width: 1%; -webkit-user-select: text;">
+</td>
+<td style="width: 1%; -webkit-user-select: text;"> <a href="http://wiki.oni2.net/File:Unfinished_building-60px.jpg" class="image" style="-webkit-user-select: text;"><img alt="Unfinished building-60px.jpg" src="./XMLSNDD_files/Unfinished_building-60px.jpg" width="60" height="60" style="-webkit-user-select: text;"></a>
+</td>
+<td style="width: 98%; -webkit-user-select: text;">
+<p style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">This page is unfinished. Can you fill in any missing information?</b><br style="-webkit-user-select: text;">If it is not clear which part of the page is unfinished, ask on the talk page.
+</p>
+</td></tr></tbody></table>
+<table border="0" cellspacing="20" cellpadding="0" style="margin-left: auto; margin-right: auto; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> More OSBD .grp / .amb information could be useful and .imp is completely left out so far.
+<p style="-webkit-user-select: text;">The xml code on this page is based on onisplit <b style="-webkit-user-select: text;">v0.9.61.0</b>
+</p>
+</td></tr></tbody></table>
+<table id="toc" class="toc" style="-webkit-user-select: text;"><tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;"><td style="-webkit-user-select: text;"><div id="toctitle" style="-webkit-user-select: text;"><h2 style="-webkit-user-select: text;">Contents</h2><span class="toctoggle" style="-webkit-user-select: text;">&nbsp;[<a href="http://wiki.oni2.net/XML:SNDD#" class="internal" id="togglelink" style="-webkit-user-select: text;">hide</a>]&nbsp;</span></div>
+<ul style="-webkit-user-select: text;">
+<li class="toclevel-1 tocsection-1" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#Source_file_creation" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">1</span> <span class="toctext" style="-webkit-user-select: text;">Source file creation</span></a></li>
+<li class="toclevel-1 tocsection-2" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#Oni_file_creation" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">2</span> <span class="toctext" style="-webkit-user-select: text;">Oni file creation</span></a>
+<ul style="-webkit-user-select: text;">
+<li class="toclevel-2 tocsection-3" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#via_Vago" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">2.1</span> <span class="toctext" style="-webkit-user-select: text;">via Vago</span></a></li>
+<li class="toclevel-2 tocsection-4" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#via_batch_file" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">2.2</span> <span class="toctext" style="-webkit-user-select: text;">via batch file</span></a></li>
+<li class="toclevel-2 tocsection-5" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#via_command_line" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">2.3</span> <span class="toctext" style="-webkit-user-select: text;">via command line</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-6" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#OSBD_information" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">3</span> <span class="toctext" style="-webkit-user-select: text;">OSBD information</span></a>
+<ul style="-webkit-user-select: text;">
+<li class="toclevel-2 tocsection-7" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#OSBDfile.imp.xml" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">3.1</span> <span class="toctext" style="-webkit-user-select: text;">OSBDfile.imp.xml</span></a></li>
+<li class="toclevel-2 tocsection-8" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#OSBDfile.amb.xml" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">3.2</span> <span class="toctext" style="-webkit-user-select: text;">OSBDfile.amb.xml</span></a></li>
+<li class="toclevel-2 tocsection-9" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#OSBDfile.grp.xml" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">3.3</span> <span class="toctext" style="-webkit-user-select: text;">OSBDfile.grp.xml</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-10" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#BINACJBOSound.xml" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">4</span> <span class="toctext" style="-webkit-user-select: text;">BINACJBOSound.xml</span></a></li>
+<li class="toclevel-1 tocsection-11" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#sound-related_BSL_commands" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">5</span> <span class="toctext" style="-webkit-user-select: text;">sound-related BSL commands</span></a></li>
+<li class="toclevel-1 tocsection-12" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#OCF_thread_about_new_music" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">6</span> <span class="toctext" style="-webkit-user-select: text;">OCF thread about new music</span></a></li>
+<li class="toclevel-1 tocsection-13" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#How_to_register_sounds_to_characters" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">7</span> <span class="toctext" style="-webkit-user-select: text;">How to register sounds to characters</span></a>
+<ul style="-webkit-user-select: text;">
+<li class="toclevel-2 tocsection-14" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#step_1:_preparing_the_TRAM" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">7.1</span> <span class="toctext" style="-webkit-user-select: text;">step 1: preparing the TRAM</span></a></li>
+<li class="toclevel-2 tocsection-15" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#step_2:_preparing_the_ONCC" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">7.2</span> <span class="toctext" style="-webkit-user-select: text;">step 2: preparing the ONCC</span></a></li>
+<li class="toclevel-2 tocsection-16" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#step_3:_preparing_the_OSBD.amb" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">7.3</span> <span class="toctext" style="-webkit-user-select: text;">step 3: preparing the OSBD.amb</span></a></li>
+<li class="toclevel-2 tocsection-17" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#step_4:_preparing_the_OSBD.grp" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">7.4</span> <span class="toctext" style="-webkit-user-select: text;">step 4: preparing the OSBD.grp</span></a></li>
+<li class="toclevel-2 tocsection-18" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD#step_5:_everything_else_what.27s_left" style="-webkit-user-select: text;"><span class="tocnumber" style="-webkit-user-select: text;">7.5</span> <span class="toctext" style="-webkit-user-select: text;">step 5: everything else what's left</span></a></li>
+</ul>
+</li>
+</ul>
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> <i style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">How do I get sounds into Oni?</b></i>
+</dd></dl>
+<p style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">In order to make your sounds available on both sides - pc and mac - you need to create them twice (one time from a wav source and another time from an aif/aifc/afc source).</b>
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=1" title="Edit section: Source file creation" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="Source_file_creation" style="-webkit-user-select: text;">Source file creation</span></h2>
+<p style="-webkit-user-select: text;">These are the properties of the source files you want to create.
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<th style="-webkit-user-select: text;"> PC retail
+</th>
+<th style="-webkit-user-select: text;"> MAC
+</th></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; width: 50%; -webkit-user-select: text;">
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> .wav
+</dd><dd style="-webkit-user-select: text;"> 22.05KHz (mono / stereo) or 44.1KHz (mono)
+</dd><dd style="-webkit-user-select: text;"> 16-bit uncompressed (PCM) or compressed (MS-ADPCM)
+</dd></dl>
+</td>
+<td style="vertical-align: top; -webkit-user-select: text;">
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> .aif / .aifc / .afc
+</dd><dd style="-webkit-user-select: text;"> 22.05KHz (mono / stereo)
+</dd><dd style="-webkit-user-select: text;"> compressed (ima4)
+</dd></dl>
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+To create suitable files you could use audacity and its ffmpeg Export Library.
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<th style="width: 33%; -webkit-user-select: text;">
+</th>
+<th style="-webkit-user-select: text;">PC version
+</th>
+<th style="-webkit-user-select: text;">Mac version
+</th></tr>
+<tr style="-webkit-user-select: text;">
+<td style="width: 33%; -webkit-user-select: text;">audacity
+</td>
+<td style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://audacity.sourceforge.net/download/beta_windows#recdown" style="-webkit-user-select: text;">link</a>
+</td>
+<td style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://audacity.sourceforge.net/download/beta_mac#recdown" style="-webkit-user-select: text;">link</a>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;">ffmpeg Export Library
+</td>
+<td style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://manual.audacityteam.org/index.php?title=FAQ:Installation_and_Plug-Ins#installffmpeg" style="-webkit-user-select: text;">link</a>
+</td>
+<td style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://manual.audacityteam.org/index.php?title=FAQ:Installation_and_Plug-Ins#installffmpeg" style="-webkit-user-select: text;">link</a>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;">mirror links
+</td>
+<td style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://dl.dropbox.com/u/139715/OniGalore/audacity%2BFFmpeg_library_for_PC.zip" style="-webkit-user-select: text;">audacity (1.3 beta) + library</a>
+</td>
+<td style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://dl.dropbox.com/u/139715/OniGalore/audacity%2BFFmpeg_library_for_MAC.zip" style="-webkit-user-select: text;">audacity (1.3 beta) + library</a>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;">installation
+</td>
+<td colspan="2" style="-webkit-user-select: text;">After you installed Audacity and the library goto <b style="-webkit-user-select: text;">Edit &gt; Preferences... &gt; Libraries</b> - click on Locate... button and find the installed library file.
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;">source file creation
+</td>
+<td style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">wav</b> for PC oni file
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+Open your sound file then goto File &gt; Export... &gt; Save As: <i style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">yourfile.<font color="#CC0000" style="-webkit-user-select: text;">wav</font></b></i>; Format: Custom FFmpeg Export; Options... &gt; wav; <b style="-webkit-user-select: text;">pcm_s16le</b>; Sample Rate: 22050; OK and save the file<br style="-webkit-user-select: text;">(adpcm_ms doesn't work with Audacity 1.3 Beta)
+</p><p style="-webkit-user-select: text;"><a rel="nofollow" class="external text hoverZoomLink" href="http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/Audacity_wav.png" style="-webkit-user-select: text;"><img src="./XMLSNDD_files/Audacity_wav_tn.png" alt="Audacity_wav_tn.png" style="-webkit-user-select: text;"></a>
+</p>
+</td>
+<td style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">aif</b> for Mac oni file
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+Open your sound file then goto File &gt; Export... &gt; Save As: <i style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">yourfile.<font color="#CC0000" style="-webkit-user-select: text;">aif</font></b></i>; Format: Custom FFmpeg Export; Options... &gt; aiff; adpcm_ima_qt; Sample Rate: 22050; OK and save the file
+</p><p style="-webkit-user-select: text;"><a rel="nofollow" class="external text hoverZoomLink" href="http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/Audacity.png" style="-webkit-user-select: text;"><img src="./XMLSNDD_files/Audacity_tn.png" alt="Audacity_tn.png" style="-webkit-user-select: text;"></a>
+</p>
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=2" title="Edit section: Oni file creation" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="Oni_file_creation" style="-webkit-user-select: text;">Oni file creation</span></h2>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=3" title="Edit section: via Vago" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="via_Vago" style="-webkit-user-select: text;">via Vago</span></h3>
+<p style="-webkit-user-select: text;">Installation:
+</p>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> Oni/AE/<a href="http://wiki.oni2.net/Anniversary_Edition/Installer#Tools" title="Anniversary Edition/Installer" style="-webkit-user-select: text;">AEInstaller2.exe &gt; Tools &gt; Manage Tools</a>
+</li></ul>
+<p style="-webkit-user-select: text;">Usage: Oni/AE/Tools/VagoGUI/<a href="http://wiki.oni2.net/Vago_(tool)" title="Vago (tool)" style="-webkit-user-select: text;">Vago.exe</a>
+</p>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> Target Platform: choose the desired mode
+</li><li style="-webkit-user-select: text;"> Tools &gt; Sound Wizard
+</li></ul>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=4" title="Edit section: via batch file" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="via_batch_file" style="-webkit-user-select: text;">via batch file</span></h3>
+<p style="-webkit-user-select: text;">Get them <a rel="nofollow" class="external text" href="http://dl.dropbox.com/u/139715/OniGalore/sound_creation_via_batch_files.zip" style="-webkit-user-select: text;">HERE</a>, includes a short readme.
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=5" title="Edit section: via command line" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="via_command_line" style="-webkit-user-select: text;">via command line</span></h3>
+<p style="-webkit-user-select: text;">For those who want to do it on their own.
+</p><p style="-webkit-user-select: text;">onisplit
+</p>
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> -create output_directory_<b style="-webkit-user-select: text;">MAC</b> input_directory/<b style="-webkit-user-select: text;">*.aif</b>
+</dd><dd style="-webkit-user-select: text;"> -create output_directory_<b style="-webkit-user-select: text;">PC</b> input_directory/<b style="-webkit-user-select: text;">*.wav</b>
+</dd><dd style="-webkit-user-select: text;"> -create output_directory input_directory/*.xml
+</dd></dl>
+<p style="-webkit-user-select: text;">For fast xml text changes and naming give them all <i style="-webkit-user-select: text;">yourfile</i> as name if you have only one sound:
+</p>
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">SNDD</font>yourfile<font color="#AAAAAA" style="-webkit-user-select: text;">.oni</font>
+</dd><dd style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>yourfile<font color="#AAAAAA" style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">.grp</b>.oni</font>
+</dd><dd style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>yourfile<font color="#AAAAAA" style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">.amb</b>.oni</font>
+</dd></dl>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=6" title="Edit section: OSBD information" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="OSBD_information" style="-webkit-user-select: text;">OSBD information</span></h2>
+<p style="-webkit-user-select: text;">OSBD files are stored globally (in level0_Final).
+</p><p style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">when use what</b>
+</p>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> OSBD*.<b style="-webkit-user-select: text;">amb</b>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> music (call OSBD from BSL)
+</li><li style="-webkit-user-select: text;"> sound dialogs (call OSBD from BSL)
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:BINA/PAR3" title="XML:BINA/PAR3" style="-webkit-user-select: text;">BINA3RAP</a> &lt;AmbientSound&gt; (action type)
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:SNDD#BINACJBOSound.xml" style="-webkit-user-select: text;">BINACJBOSound.xml</a> (area-fixed sounds)
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:TRIG" title="XML:TRIG" style="-webkit-user-select: text;">TRIG</a> &lt;ActiveSound&gt;
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:TURR" title="XML:TURR" style="-webkit-user-select: text;">TURR</a> &lt;ActiveSound&gt;
+</li></ul>
+</li></ul>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> OSBD*.<b style="-webkit-user-select: text;">imp</b>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:BINA/PAR3" title="XML:BINA/PAR3" style="-webkit-user-select: text;">BINA3RAP</a> &lt;FlyBySoundName&gt; and &lt;ImpulseSound&gt; (action type)
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:BINA/ONIE" title="XML:BINA/ONIE" style="-webkit-user-select: text;">BINA/ONIE</a> &lt;Sound&gt;&lt;Name&gt;
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:BINA/SABD" title="XML:BINA/SABD" style="-webkit-user-select: text;">BINADBAS</a> &lt;Sound&gt;
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:ONCC" title="XML:ONCC" style="-webkit-user-select: text;">ONCC</a> hurt sounds (also indirectly with chr_pain) and &lt;SoundConstants&gt;
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:ONWC" title="XML:ONWC" style="-webkit-user-select: text;">ONWC</a> &lt;EmptyWeaponSound&gt;
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:TRAM" title="XML:TRAM" style="-webkit-user-select: text;">TRAM</a> &lt;Sound&gt;&lt;Name&gt;
+</li><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:TRIG" title="XML:TRIG" style="-webkit-user-select: text;">TRIG</a> &lt;TriggerSound&gt;
+</li></ul>
+</li></ul>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+<b style="-webkit-user-select: text;">details on music</b>
+</p>
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> OSBD_newmusic.amb.oni (The main file, links to the group, intro and ending files)
+</dd><dd style="-webkit-user-select: text;"> OSBD_newmusic.grp.oni (Contain links to the music files)
+</dd><dd style="-webkit-user-select: text;"> OSBD_newmusic_in.grp.oni (Links to intro part of the music - Optional)
+</dd><dd style="-webkit-user-select: text;"> OSBD_newmusic_out.grp.oni (Links to the ending of the music - Optional)
+</dd><dd style="-webkit-user-select: text;"> SNDD_newmusic1.oni (The individual music files - Its best to break up the music into segments of perhaps 30 secs to a minute each - Oni may crash or become sluggish if you use a single file for the music -- EdT) (What are the limits? --<a href="http://wiki.oni2.net/User:Paradox-01" title="User:Paradox-01" style="-webkit-user-select: text;">Paradox-01</a>)
+</dd></dl>
+<p style="-webkit-user-select: text;">Music parts between intro and outro are played in a random order.
+</p><p style="-webkit-user-select: text;">Why would Bungie have wanted random parts? A fair guess can be made with the songs' purpose: giving fights more <i style="-webkit-user-select: text;">atmosphere</i>. But every player finishes the enemies in a different time: one wins in 2 minutes, the other in 6 minutes, etc. So 1) modular parts seem perfect to delay the outro part when it's necessary and 2) a random order adds more variety (making the loop less boring).
+</p><p style="-webkit-user-select: text;">grp files have a &lt;Weight&gt; tag under &lt;Permutation&gt;. <a href="http://en.wikipedia.org/wiki/Permutation" class="extiw" title="wikipedia:Permutation" style="-webkit-user-select: text;">Permutation</a> should have something to do how music parts get repeated. However, it's not clear what influence &lt;Weight&gt; has on the repetitions. Is it like TRAC's &lt;Weight&gt; used for probability?
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=7" title="Edit section: OSBDfile.imp.xml" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="OSBDfile.imp.xml" style="-webkit-user-select: text;">OSBDfile.imp.xml</span></h3>
+<p style="-webkit-user-select: text;">What is an impulse? Looking at the XML it seems unique in its spacial features: &lt;Volume&gt;&lt;Angle&gt; / &lt;Volume&gt;&lt;MinAttenuation&gt; / &lt;ImpactVelocity&gt; / &lt;MinOcclusion&gt;
+</p><p style="-webkit-user-select: text;">Hypothesis:
+</p>
+<ol style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> Impulses are preferably used by moving sources.
+</li><li style="-webkit-user-select: text;"> They cannot be stopped by BSL once triggered to play.
+</li><li style="-webkit-user-select: text;"> AI can hear them
+</li><li style="-webkit-user-select: text;"> Minimum and maximum volume angle seems to be always 360 degrees. Maybe artifact properties since sound should propagate through space in all directions and area of effect is mostly made by their volume distance.
+</li><li style="-webkit-user-select: text;"> File structure is always the same.
+</li></ol>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<td style="width: 120px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">tag</b>
+</td>
+<td style="width: 100px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">type</b>
+</td>
+<td style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;">description</b>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;ImpulseSound&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Group&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;"> &lt;Priority&gt;
+</td>
+<td style="vertical-align: top; -webkit-user-select: text;"> flag
+</td>
+<td style="-webkit-user-select: text;"> When are these different flags used?
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> Low (default impact related? (ONIE concrete) + shell (ammunition)?)
+</dd><dd style="-webkit-user-select: text;"> Normal (AI, animation and impact related?)
+</dd><dd style="-webkit-user-select: text;"> High (OSBDtrigger_hit.imp.xml only?)
+</dd><dd style="-webkit-user-select: text;"> Highest (OSBDkonoko_gruesome_death.imp.xml only?)
+</dd></dl>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Volume&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Distance&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;"> between min radius (distance) and sound origin the sound volume is equally strong
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;"> between max and min radius (distance) there's a transition of the sound volume, greater distance than max makes the sound unhearable
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Angle&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;"> Space angle? Does this work like the &lt;Distance&gt; tag?
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;AlternateImpulse&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Treshold&gt;
+</td>
+<td style="-webkit-user-select: text;"> int32
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Impulse&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.imp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;ImpactVelocity&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;MinOcclusion&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=8" title="Edit section: OSBDfile.amb.xml" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="OSBDfile.amb.xml" style="-webkit-user-select: text;">OSBDfile.amb.xml</span></h3>
+<p style="-webkit-user-select: text;">In case you want to create a simple sound file you can basically copy the code and change the red marked stuff in the examples. 
+</p>
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> OSBDfile.grp.xml, OSBDfile.amb.xml, BINACJBOSound.xml are showing the code from the <a rel="nofollow" class="external text" href="http://mods.oni2.net/node/177" style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">nyan cat mod</b></a>.
+</dd></dl>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<td style="width: 120px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">tag</b>
+</td>
+<td style="width: 100px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">type</b>
+</td>
+<td style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;">description</b>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;AmbientSound&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;"> &lt;Priority&gt;
+</td>
+<td style="vertical-align: top; -webkit-user-select: text;"> flag
+</td>
+<td style="-webkit-user-select: text;">
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> Low
+</dd><dd style="-webkit-user-select: text;"> Normal
+</dd><dd style="-webkit-user-select: text;"> High
+</dd><dd style="-webkit-user-select: text;"> Highest
+</dd></dl>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;"> &lt;Flags&gt;
+</td>
+<td style="vertical-align: top; -webkit-user-select: text;"> flag
+</td>
+<td style="-webkit-user-select: text;">
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> InterruptTracksOnStop - this flag must be set if you want to use BSL command <i style="-webkit-user-select: text;">sound_music_stop</i>
+</dd><dd style="-webkit-user-select: text;"> PlayOnce
+</dd><dd style="-webkit-user-select: text;"> CanPan
+</dd></dl>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;DetailTrackProperties&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;SphereRadius&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;ElapsedTime&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Volume&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Distance&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;DetailTrack&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;">&lt;BaseTrack1&gt;</b>
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;BaseTrack2&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;InSound&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;OutSound&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Treshold&gt;
+</td>
+<td style="-webkit-user-select: text;"> int32
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;MinOcclusion&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+An example:
+</p>
+<pre style="-webkit-user-select: text;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;Oni&gt;
+   &lt;AmbientSound&gt;
+       &lt;Priority&gt;Normal&lt;/Priority&gt;
+       &lt;Flags&gt;InterruptTracksOnStop&lt;/Flags&gt;
+       &lt;DetailTrackProperties&gt;
+           &lt;SphereRadius&gt;10&lt;/SphereRadius&gt;
+           &lt;ElapsedTime&gt;
+               &lt;Min&gt;0&lt;/Min&gt;
+               &lt;Max&gt;0&lt;/Max&gt;
+           &lt;/ElapsedTime&gt;
+       &lt;/DetailTrackProperties&gt;
+       &lt;Volume&gt;
+           &lt;Distance&gt;
+               &lt;Min&gt;10&lt;/Min&gt;
+               &lt;Max&gt;50&lt;/Max&gt;
+           &lt;/Distance&gt;
+       &lt;/Volume&gt;
+       &lt;DetailTrack&gt;&lt;/DetailTrack&gt;
+       <b style="-webkit-user-select: text;">&lt;BaseTrack1&gt;<font color="#FF0000" style="-webkit-user-select: text;">nyan</font>&lt;/BaseTrack1&gt;</b>
+       &lt;BaseTrack2&gt;&lt;/BaseTrack2&gt;
+       &lt;InSound&gt;&lt;/InSound&gt;
+       &lt;OutSound&gt;&lt;/OutSound&gt;
+       &lt;Treshold&gt;3&lt;/Treshold&gt;
+       &lt;MinOcclusion&gt;0&lt;/MinOcclusion&gt;
+   &lt;/AmbientSound&gt;
+&lt;/Oni&gt;
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=9" title="Edit section: OSBDfile.grp.xml" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="OSBDfile.grp.xml" style="-webkit-user-select: text;">OSBDfile.grp.xml</span></h3>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<td style="width: 120px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">tag</b>
+</td>
+<td style="width: 100px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">type</b>
+</td>
+<td style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;">description</b>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;SoundGroup&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Volume&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Pitch&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Flags&gt;
+</td>
+<td style="-webkit-user-select: text;"> flag
+</td>
+<td style="-webkit-user-select: text;"> PreventRepeat - forces to play different sounds if there are more than one permutations
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;"> &lt;NumberOfChannels&gt;
+</td>
+<td style="vertical-align: top; -webkit-user-select: text;"> int32
+</td>
+<td style="-webkit-user-select: text;"> Here you tell Oni if your sound file is mono or stereo. Windows' 44.1 kHz is an exception.
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<th style="-webkit-user-select: text;">
+</th>
+<th style="-webkit-user-select: text;"> 22.05 kHz, mono
+</th>
+<th style="-webkit-user-select: text;"> 22.05 kHz, stereo
+</th>
+<th style="-webkit-user-select: text;"> 44.1 kHz, mono <b style="-webkit-user-select: text;">(PC-only)</b>
+</th></tr>
+<tr style="-webkit-user-select: text;">
+<td style="text-align: center; -webkit-user-select: text;"> NumberOfChannels
+</td>
+<td style="text-align: center; -webkit-user-select: text;"> 1
+</td>
+<td style="text-align: center; -webkit-user-select: text;"> 2
+</td>
+<td style="text-align: center; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">2</b>
+</td></tr></tbody></table>
+<dl style="-webkit-user-select: text;"><dt style="-webkit-user-select: text;">consequences of wrong imports</dt><dd style="-webkit-user-select: text;">
+</dd><dd style="-webkit-user-select: text;"> if grp's &lt;NumberOfChannels&gt; is 1 and sound file is 22.05 kHz, stereo then the sound won't get played
+</dd><dd style="-webkit-user-select: text;"> if grp's &lt;NumberOfChannels&gt; is 1 and sound file is 44.1 kHz, mono then the sound will play distorted
+</dd></dl>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Permutations&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;"> int32 array for the &lt;Permutation&gt; tags.
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Permutation&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Weight&gt;
+</td>
+<td style="-webkit-user-select: text;"> int32
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Volume&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Pitch&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Sound&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">SNDD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.oni</font>, file prefix and suffix aren't used
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+An example:
+</p>
+<pre style="-webkit-user-select: text;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;Oni&gt;
+   &lt;SoundGroup&gt;
+       &lt;Volume&gt;1&lt;/Volume&gt;
+       &lt;Pitch&gt;1&lt;/Pitch&gt;
+       &lt;Flags&gt;PreventRepeat&lt;/Flags&gt;
+       &lt;NumberOfChannels&gt;2&lt;/NumberOfChannels&gt;
+       &lt;Permutations&gt;
+           &lt;Permutation&gt;
+               &lt;Weight&gt;10&lt;/Weight&gt;
+               &lt;Volume&gt;
+                   &lt;Min&gt;1&lt;/Min&gt;
+                   &lt;Max&gt;1&lt;/Max&gt;
+               &lt;/Volume&gt;
+               &lt;Pitch&gt;
+                   &lt;Min&gt;1&lt;/Min&gt;
+                   &lt;Max&gt;1&lt;/Max&gt;
+               &lt;/Pitch&gt;
+               <b style="-webkit-user-select: text;">&lt;Sound&gt;<font color="#FF0000" style="-webkit-user-select: text;">nyan</font>&lt;/Sound&gt;</b>
+           &lt;/Permutation&gt;
+       &lt;/Permutations&gt;
+   &lt;/SoundGroup&gt;
+&lt;/Oni&gt;
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=10" title="Edit section: BINACJBOSound.xml" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="BINACJBOSound.xml" style="-webkit-user-select: text;">BINACJBOSound.xml</span></h2>
+<p style="-webkit-user-select: text;">This is for area-fixed sounds.
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<td style="width: 120px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">tag</b>
+</td>
+<td style="width: 100px; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">type</b>
+</td>
+<td style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;">description</b>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Objects&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;"> This tag marks the file as BINACJBO.
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;SNDG Id="..."&gt;
+</td>
+<td style="-webkit-user-select: text;"> integer
+</td>
+<td style="-webkit-user-select: text;"> This tag marks the file as a sound list. ID doesn't matter at import time.
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Header&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="vertical-align: top; -webkit-user-select: text;"> &lt;Flags&gt;
+</td>
+<td style="vertical-align: top; -webkit-user-select: text;"> flag
+</td>
+<td style="-webkit-user-select: text;"> Ignore it. Those flags were used in the past.
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> None 
+</dd><dd style="-webkit-user-select: text;"> Locked 
+</dd><dd style="-webkit-user-select: text;"> PlacedInGame 
+</dd><dd style="-webkit-user-select: text;"> Temporary 
+</dd><dd style="-webkit-user-select: text;"> Gunk 
+</dd></dl>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Position&gt;
+</td>
+<td style="-webkit-user-select: text;"> float x3
+</td>
+<td style="-webkit-user-select: text;"> here you tell Oni where you want the sound to be <a href="http://wiki.oni2.net/OBD_talk:BINA/OBJC" title="OBD talk:BINA/OBJC" style="-webkit-user-select: text;">located</a>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Rotation&gt;
+</td>
+<td style="-webkit-user-select: text;"> float x3
+</td>
+<td style="-webkit-user-select: text;"> Not really important.
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;OSD&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Class&gt;
+</td>
+<td style="-webkit-user-select: text;"> char[32]
+</td>
+<td style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">SNDD</font>name<font color="#AAAAAA" style="-webkit-user-select: text;">.amb.oni</font>, file prefix and suffix aren't used
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Sphere&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;">
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;MinRadius&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;"> between min radius and sound origin (&lt;Position&gt;) the sound volume is equally strong
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;MaxRadius&gt;
+</td>
+<td style="-webkit-user-select: text;"> float
+</td>
+<td style="-webkit-user-select: text;"> between max and min radius there is a transition of the sound volume, greater distance than max makes the sound unhearable
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Box&gt;
+</td>
+<td style="-webkit-user-select: text;"> -
+</td>
+<td style="-webkit-user-select: text;"> alternative to &lt;Sphere&gt;
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Min&gt;
+</td>
+<td style="-webkit-user-select: text;"> float x3
+</td>
+<td style="-webkit-user-select: text;"> X1 Y1 Z1
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> &lt;Max&gt;
+</td>
+<td style="-webkit-user-select: text;"> float x3
+</td>
+<td style="-webkit-user-select: text;"> X2 Y2 Z2
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+An example:
+</p>
+<pre style="-webkit-user-select: text;">       &lt;SNDG Id="8805"&gt;
+           &lt;Header&gt;
+               &lt;Flags&gt;&lt;/Flags&gt;
+               <b style="-webkit-user-select: text;">&lt;Position&gt;<font color="#FF0000" style="-webkit-user-select: text;">125 10 2231</font>&lt;/Position&gt;</b>
+               &lt;Rotation&gt;0 0 0&lt;/Rotation&gt;
+           &lt;/Header&gt;
+           &lt;OSD&gt;
+               <b style="-webkit-user-select: text;">&lt;Class&gt;<font color="#FF0000" style="-webkit-user-select: text;">nyan</font>&lt;/Class&gt;</b>
+               &lt;Sphere&gt;
+                   &lt;MinRadius&gt;7&lt;/MinRadius&gt;
+                   &lt;MaxRadius&gt;21&lt;/MaxRadius&gt;
+               &lt;/Sphere&gt;
+               &lt;Volume&gt;0.75&lt;/Volume&gt;
+               &lt;Pitch&gt;1&lt;/Pitch&gt;
+           &lt;/OSD&gt;
+       &lt;/SNDG&gt;
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=11" title="Edit section: sound-related BSL commands" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="sound-related_BSL_commands" style="-webkit-user-select: text;">sound-related BSL commands</span></h2>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/BSL:Functions#sound" title="BSL:Functions" style="-webkit-user-select: text;">on this wiki</a>
+</li><li style="-webkit-user-select: text;"> <a rel="nofollow" class="external text" href="http://ssg.oni2.net/commands.htm#sound" style="-webkit-user-select: text;">on ssg's website</a>
+</li></ul>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+sound_music_stop <i style="-webkit-user-select: text;">soundtrack</i> - can only be used if .amb file has the InterruptTracksOnStop flag<br style="-webkit-user-select: text;">
+sound_music_stop <i style="-webkit-user-select: text;">soundtrack</i> 1 - soundtrack stop after 1 second while it gets quieter
+</p><p style="-webkit-user-select: text;">You need a custom function if you want to fade out a soundtrack over more than one seconds. It could look like this:
+</p>
+<pre style="-webkit-user-select: text;">var float x = 1;
+var int y = 0;
+
+# don't test this function with the console, it could happen that the function stops working after 4 cycles
+func fade_music
+{
+ 	# if statement with float values doesn't seem to work therefore the int y
+	y = y + 1
+	x = x - .01
+	sound_music_volume (soundtrack, x)
+	sleep 10
+ 	if (y eq 99)
+	{
+		# dmsg "stop music"
+		sound_music_stop soundtrack
+	}
+	if (y &lt; 99)
+	{
+		fork fade_music
+	}
+}
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=12" title="Edit section: OCF thread about new music" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="OCF_thread_about_new_music" style="-webkit-user-select: text;"><a rel="nofollow" class="external text" href="http://oni.bungie.org/community/forum/viewtopic.php?id=798" style="-webkit-user-select: text;">OCF thread about new music</a></span></h2>
+<h2 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=13" title="Edit section: How to register sounds to characters" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="How_to_register_sounds_to_characters" style="-webkit-user-select: text;">How to register sounds to characters</span></h2>
+<p style="-webkit-user-select: text;">... such as sounds of heavy attacks and taunts.
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+<b style="-webkit-user-select: text;">Let's see how sounds become picked up:</b><br style="-webkit-user-select: text;">Schemata:
+</p>
+<dl style="-webkit-user-select: text;"><dd style="-webkit-user-select: text;"> TRAM -&gt; ONCC -&gt; OSBD.amb -&gt; OSBD.grp -&gt; SNDD
+</dd></dl>
+<p style="-webkit-user-select: text;">Explanation:
+</p>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> The character performs a move / attack whereby the TRAM file holds a sound ID (&lt;Vocalization&gt;).
+</li><li style="-webkit-user-select: text;"> A link (OSBD.amb name) in ONCC file becomes looked up based on the sound ID.<br style="-webkit-user-select: text;">Note that the ONCC file has also a probability value that decides whether a sound becomes played or not.
+</li><li style="-webkit-user-select: text;"> The game engine looks into OSBD.amb and follows the link into OSBD.grp.
+</li><li style="-webkit-user-select: text;"> <b style="-webkit-user-select: text;">OSBD.grp can hold multiple links to SNDD files.</b> That's why Konoko can have multiple taunt sounds.
+</li></ul>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=14" title="Edit section: step 1: preparing the TRAM" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="step_1:_preparing_the_TRAM" style="-webkit-user-select: text;">step 1: preparing the TRAM</span></h3>
+<p style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">Search for &lt;Vocalization&gt; in the TRAM file</b> and give it an ID according to the following table.
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<th colspan="2" style="-webkit-user-select: text;"> TRAM &lt;Vocalization&gt; IDs refer to these ONCC SoundConstants tags
+</th></tr>
+<tr style="-webkit-user-select: text;">
+<td style="width: 30px; -webkit-user-select: text;"> ID
+</td>
+<td style="-webkit-user-select: text;"> link to ...
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 0
+</td>
+<td style="-webkit-user-select: text;"> &lt;TauntProbability&gt; - <b style="-webkit-user-select: text;">taunt(s)</b>
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 1
+</td>
+<td style="-webkit-user-select: text;"> &lt;AlertProbability&gt; - AI being surprised by a sound
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 2
+</td>
+<td style="-webkit-user-select: text;"> &lt;StartleProbability&gt; - AI being surprised by an enemy
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 3
+</td>
+<td style="-webkit-user-select: text;"> &lt;CheckBodyProbability&gt; - (AI only?) death taunt (when enemy / player dies)
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 4
+</td>
+<td style="-webkit-user-select: text;"> &lt;PursueProbability&gt; - sound when character lost track of enemy
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 5
+</td>
+<td style="-webkit-user-select: text;"> &lt;CoverProbability&gt; - being afraid (E.g. "Dont't hurt me.")
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 6
+</td>
+<td style="-webkit-user-select: text;"> &lt;SuperPunchSound&gt; - <b style="-webkit-user-select: text;">sound of ######punch_heavy.oni</b>, super punches don't have sound IDs
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 7
+</td>
+<td style="-webkit-user-select: text;"> &lt;SuperKickSound&gt; - <b style="-webkit-user-select: text;">sound of ######kick_heavy.oni</b>, super kicks don't have sound IDs
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> 8
+</td>
+<td style="-webkit-user-select: text;"> &lt;Super3Sound&gt; - AI specialty, Mukade use it for his devil star attack (TRAMNINCOMfireball)
+</td></tr>
+<tr style="-webkit-user-select: text;">
+<td style="-webkit-user-select: text;"> <font color="#777777" style="-webkit-user-select: text;">9</font>
+</td>
+<td style="-webkit-user-select: text;"> <font color="#777777" style="-webkit-user-select: text;">&lt;Super4Sound&gt; - unused</font>
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=15" title="Edit section: step 2: preparing the ONCC" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="step_2:_preparing_the_ONCC" style="-webkit-user-select: text;">step 2: preparing the ONCC</span></h3>
+<p style="-webkit-user-select: text;">Search for &lt;SoundConstants&gt; and set a value between 0 and 100. 100 will make the engine play a sound always the taunt animation is played.
+</p><p style="-webkit-user-select: text;">Let's compare with Konoko (and in the following steps especially the with her taunt files.)
+In ONCCkonoko_generic.xml it looks like this:
+</p>
+<pre style="-webkit-user-select: text;">           &lt;SoundConstants&gt;
+               &lt;TauntProbability&gt;100&lt;/TauntProbability&gt;
+               &lt;AlertProbability&gt;0&lt;/AlertProbability&gt;
+               &lt;StartleProbability&gt;0&lt;/StartleProbability&gt;
+               &lt;CheckBodyProbability&gt;0&lt;/CheckBodyProbability&gt;
+               &lt;PursueProbability&gt;0&lt;/PursueProbability&gt;
+               &lt;CoverProbability&gt;0&lt;/CoverProbability&gt;
+               &lt;SuperPunchProbability&gt;100&lt;/SuperPunchProbability&gt;
+               &lt;SuperKickProbability&gt;100&lt;/SuperKickProbability&gt;
+               &lt;Super3Probability&gt;0&lt;/Super3Probability&gt;
+               &lt;Super4Probability&gt;0&lt;/Super4Probability&gt;
+               &lt;TauntSound&gt;c17_99_28konoko&lt;/TauntSound&gt;
+               &lt;AlertSound&gt;&lt;/AlertSound&gt;
+               &lt;StartleSound&gt;&lt;/StartleSound&gt;
+               &lt;CheckBodySound&gt;&lt;/CheckBodySound&gt;
+               &lt;PursueSound&gt;&lt;/PursueSound&gt;
+               &lt;CoverSound&gt;&lt;/CoverSound&gt;
+               &lt;SuperPunchSound&gt;c18_79_14konoko&lt;/SuperPunchSound&gt;
+               &lt;SuperKickSound&gt;c18_79_15konoko&lt;/SuperKickSound&gt;
+               &lt;Super3Sound&gt;&lt;/Super3Sound&gt;
+               &lt;Super4Sound&gt;&lt;/Super4Sound&gt;
+           &lt;/SoundConstants&gt;
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=16" title="Edit section: step 3: preparing the OSBD.amb" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="step_3:_preparing_the_OSBD.amb" style="-webkit-user-select: text;">step 3: preparing the OSBD.amb</span></h3>
+<p style="-webkit-user-select: text;">You basically need such a file...
+</p><p style="-webkit-user-select: text;">Do you see the &lt;BaseTrack1&gt; tag? In this case it holds the link <font color="#AAAAAA" style="-webkit-user-select: text;">OSBD</font>c17_99_28konoko<font color="#AAAAAA" style="-webkit-user-select: text;">.grp.oni</font>.
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<pre style="-webkit-user-select: text;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;Oni&gt;
+   &lt;AmbientSound&gt;
+       &lt;Priority&gt;Highest&lt;/Priority&gt;
+       &lt;Flags&gt;InterruptTracksOnStop PlayOnce&lt;/Flags&gt;
+       &lt;DetailTrackProperties&gt;
+           &lt;SphereRadius&gt;10&lt;/SphereRadius&gt;
+           &lt;ElapsedTime&gt;
+               &lt;Min&gt;0&lt;/Min&gt;
+               &lt;Max&gt;0&lt;/Max&gt;
+           &lt;/ElapsedTime&gt;
+       &lt;/DetailTrackProperties&gt;
+       &lt;Volume&gt;
+           &lt;Distance&gt;
+               &lt;Min&gt;10&lt;/Min&gt;
+               &lt;Max&gt;50&lt;/Max&gt;
+           &lt;/Distance&gt;
+       &lt;/Volume&gt;
+       &lt;DetailTrack&gt;&lt;/DetailTrack&gt;
+       &lt;BaseTrack1&gt;c17_99_28konoko&lt;/BaseTrack1&gt;
+       &lt;BaseTrack2&gt;&lt;/BaseTrack2&gt;
+       &lt;InSound&gt;&lt;/InSound&gt;
+       &lt;OutSound&gt;&lt;/OutSound&gt;
+       &lt;Treshold&gt;3&lt;/Treshold&gt;
+       &lt;MinOcclusion&gt;0&lt;/MinOcclusion&gt;
+   &lt;/AmbientSound&gt;
+&lt;/Oni&gt;
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=17" title="Edit section: step 4: preparing the OSBD.grp" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="step_4:_preparing_the_OSBD.grp" style="-webkit-user-select: text;">step 4: preparing the OSBD.grp</span></h3>
+<p style="-webkit-user-select: text;">Since &lt;NumberOfChannels&gt; is only once presented all the SNDD files must have the same number of channels.
+</p>
+<table class="wikitable" style="width: 100%; -webkit-user-select: text;">
+<tbody style="-webkit-user-select: text;"><tr style="-webkit-user-select: text;">
+<th style="-webkit-user-select: text;">
+</th>
+<th style="-webkit-user-select: text;"> 22.05 kHz, mono
+</th>
+<th style="-webkit-user-select: text;"> 22.05 kHz, stereo
+</th>
+<th style="-webkit-user-select: text;"> 44.1 kHz, mono <b style="-webkit-user-select: text;">(PC-only)</b>
+</th></tr>
+<tr style="-webkit-user-select: text;">
+<td style="text-align: center; -webkit-user-select: text;"> NumberOfChannels
+</td>
+<td style="text-align: center; -webkit-user-select: text;"> 1
+</td>
+<td style="text-align: center; -webkit-user-select: text;"> 2
+</td>
+<td style="text-align: center; -webkit-user-select: text;"> <b style="-webkit-user-select: text;">2</b>
+</td></tr></tbody></table>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+(It's possible to speed up sounds with &lt;Pitch&gt;. E.g. Fury's taunt is speeded up by 1.14 to <i style="-webkit-user-select: text;">brighten</i> the voice. But in most cases you probably want to keep it as "1".)
+</p>
+<pre style="-webkit-user-select: text;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;Oni&gt;
+   &lt;SoundGroup&gt;
+       &lt;Volume&gt;1&lt;/Volume&gt;
+       &lt;Pitch&gt;1&lt;/Pitch&gt;
+       &lt;Flags&gt;PreventRepeat&lt;/Flags&gt;
+       &lt;NumberOfChannels&gt;1&lt;/NumberOfChannels&gt;
+       &lt;Permutations&gt;
+           &lt;Permutation&gt;
+               &lt;Weight&gt;10&lt;/Weight&gt;
+               &lt;Volume&gt;
+                   &lt;Min&gt;1&lt;/Min&gt;
+                   &lt;Max&gt;1&lt;/Max&gt;
+               &lt;/Volume&gt;
+               &lt;Pitch&gt;
+                   &lt;Min&gt;1&lt;/Min&gt;
+                   &lt;Max&gt;1&lt;/Max&gt;
+               &lt;/Pitch&gt;
+               &lt;Sound&gt;c17_99_28konoko.aif&lt;/Sound&gt;
+           &lt;/Permutation&gt;
+           &lt;Permutation&gt;
+               &lt;Weight&gt;10&lt;/Weight&gt;
+               &lt;Volume&gt;
+                   &lt;Min&gt;1&lt;/Min&gt;
+                   &lt;Max&gt;1&lt;/Max&gt;
+               &lt;/Volume&gt;
+               &lt;Pitch&gt;
+                   &lt;Min&gt;1&lt;/Min&gt;
+                   &lt;Max&gt;1&lt;/Max&gt;
+               &lt;/Pitch&gt;
+               &lt;Sound&gt;c17_99_29konoko.aif&lt;/Sound&gt;
+           &lt;/Permutation&gt;
+           <i style="-webkit-user-select: text;"><b style="-webkit-user-select: text;">[...]</b></i>
+       &lt;/Permutations&gt;
+   &lt;/SoundGroup&gt;
+&lt;/Oni&gt;
+</pre>
+<p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+As you can see
+</p>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">SNDD</font>c17_99_28konoko.aif<font color="#AAAAAA" style="-webkit-user-select: text;">.oni</font> ("You're gonna get beat(en) by a girl!")
+</li><li style="-webkit-user-select: text;"> <font color="#AAAAAA" style="-webkit-user-select: text;">SNDD</font>c17_99_29konoko.aif<font color="#AAAAAA" style="-webkit-user-select: text;">.oni</font> ("Ready to lose?") (You can play sounds with (PC) onisplit GUI or (Mac) AETools.
+</li><li style="-webkit-user-select: text;"> <i style="-webkit-user-select: text;">[...]</i>
+</li></ul>
+<p style="-webkit-user-select: text;">are used for Konoko. ("aif" is here part of the name, don't get bothered by it.)
+This file is the magic why Konoko has multiple sounds through one and the same taunt animation.
+</p><p style="-webkit-user-select: text;"><br style="-webkit-user-select: text;">
+</p>
+<h3 style="-webkit-user-select: text;"><span class="editsection" style="-webkit-user-select: text;">[<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit&amp;section=18" title="Edit section: step 5: everything else what&#39;s left" style="-webkit-user-select: text;">edit</a>]</span> <span class="mw-headline" id="step_5:_everything_else_what.27s_left" style="-webkit-user-select: text;">step 5: everything else what's left</span></h3>
+<ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"> <a href="http://wiki.oni2.net/XML:SNDD#Source_file_creation" style="-webkit-user-select: text;">create your SNDD</a> if you haven't yet
+</li><li style="-webkit-user-select: text;"> put your files into a package
+</li><li style="-webkit-user-select: text;"> test your stuff in-game
+</li></ul>
+
+<!-- 
+NewPP limit report
+Preprocessor node count: 150/1000000
+Post-expand include size: 1992/2097152 bytes
+Template argument size: 223/2097152 bytes
+Expensive parser function count: 0/100
+-->
+
+<!-- Saved in parser cache with key oni_wiki:pcache:idhash:4759-0!*!0!!en!2!* and timestamp 20161012211450 -->
+</div>				<!-- /bodycontent -->
+								<!-- printfooter -->
+				<div class="printfooter" style="-webkit-user-select: text;">
+				Retrieved from "<a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;oldid=25591" style="-webkit-user-select: text;">http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;oldid=25591</a>"				</div>
+				<!-- /printfooter -->
+												<!-- catlinks -->
+				<div id="catlinks" class="catlinks" style="-webkit-user-select: text;"><div id="mw-normal-catlinks" class="mw-normal-catlinks" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:Categories" title="Special:Categories" style="-webkit-user-select: text;">Categories</a>: <ul style="-webkit-user-select: text;"><li style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Category:Articles_that_need_finishing" title="Category:Articles that need finishing" style="-webkit-user-select: text;">Articles that need finishing</a></li><li style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Category:XML_data_docs" title="Category:XML data docs" style="-webkit-user-select: text;">XML data docs</a></li></ul></div></div>				<!-- /catlinks -->
+												<div class="visualClear" style="-webkit-user-select: text;"></div>
+				<!-- debughtml -->
+								<!-- /debughtml -->
+			</div>
+			<!-- /bodyContent -->
+		</div>
+		<!-- /content -->
+		<!-- header -->
+		<div id="mw-head" class="noprint" style="-webkit-user-select: text;">
+			
+<!-- 0 -->
+<div id="p-personal" class="" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;">Personal tools</h5>
+	<ul style="-webkit-user-select: text;">
+		<li id="pt-userpage" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/User:Script_10k" title="Your user page [alt-shift-.]" accesskey="." style="-webkit-user-select: text;">Script 10k</a></li>
+		<li id="pt-mytalk" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/User_talk:Script_10k" title="Your talk page [alt-shift-n]" accesskey="n" style="-webkit-user-select: text;">My talk</a></li>
+		<li id="pt-preferences" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:Preferences" title="Your preferences" style="-webkit-user-select: text;">My preferences</a></li>
+		<li id="pt-watchlist" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:Watchlist" title="A list of pages you are monitoring for changes [alt-shift-l]" accesskey="l" style="-webkit-user-select: text;">My watchlist</a></li>
+		<li id="pt-mycontris" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:Contributions/Script_10k" title="A list of your contributions [alt-shift-y]" accesskey="y" style="-webkit-user-select: text;">My contributions</a></li>
+		<li id="pt-logout" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=Special:UserLogout&amp;returnto=XML%3ASNDD" title="Log out" style="-webkit-user-select: text;">Log out</a></li>
+	</ul>
+</div>
+
+<!-- /0 -->
+			<div id="left-navigation" style="-webkit-user-select: text;">
+				
+<!-- 0 -->
+<div id="p-namespaces" class="vectorTabs" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;">Namespaces</h5>
+	<ul style="-webkit-user-select: text;">
+					<li id="ca-nstab-xml" class="selected" style="-webkit-user-select: text;"><span style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD" style="-webkit-user-select: text;">XML</a></span></li>
+					<li id="ca-talk" class="new" style="-webkit-user-select: text;"><span style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML_talk:SNDD&amp;action=edit&amp;redlink=1" title="Discussion about the content page [alt-shift-t]" accesskey="t" style="-webkit-user-select: text;">Discussion</a></span></li>
+			</ul>
+</div>
+
+<!-- /0 -->
+
+<!-- 1 -->
+<div id="p-variants" class="vectorMenu emptyPortlet" style="-webkit-user-select: text;">
+	<h4 style="-webkit-user-select: text;">
+		</h4>
+	<h5 style="-webkit-user-select: text;"><span style="-webkit-user-select: text;">Variants</span><a href="http://wiki.oni2.net/XML:SNDD#" style="-webkit-user-select: text;"></a></h5>
+	<div class="menu" style="-webkit-user-select: text;">
+		<ul style="-webkit-user-select: text;">
+					</ul>
+	</div>
+</div>
+
+<!-- /1 -->
+			</div>
+			<div id="right-navigation" style="-webkit-user-select: text;">
+				
+<!-- 0 -->
+<div id="p-views" class="vectorTabs" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;">Views</h5>
+	<ul style="-webkit-user-select: text;">
+					<li id="ca-view" class="selected" style="-webkit-user-select: text;"><span style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/XML:SNDD" style="-webkit-user-select: text;">Read</a></span></li>
+					<li id="ca-edit" style="-webkit-user-select: text;"><span style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=edit" title="You can edit this page. Please use the preview button before saving [alt-shift-e]" accesskey="e" style="-webkit-user-select: text;">Edit</a></span></li>
+					<li id="ca-history" class="collapsible" style="-webkit-user-select: text;"><span style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=history" title="Past revisions of this page [alt-shift-h]" accesskey="h" style="-webkit-user-select: text;">View history</a></span></li>
+			</ul>
+</div>
+
+<!-- /0 -->
+
+<!-- 1 -->
+<div id="p-cactions" class="vectorMenu" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;"><span style="-webkit-user-select: text;">Actions</span><a href="http://wiki.oni2.net/XML:SNDD#" style="-webkit-user-select: text;"></a></h5>
+	<div class="menu" style="-webkit-user-select: text;">
+		<ul style="-webkit-user-select: text;">
+							<li id="ca-move" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:MovePage/XML:SNDD" title="Move this page [alt-shift-m]" accesskey="m" style="-webkit-user-select: text;">Move</a></li>
+							<li id="ca-watch" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;action=watch&amp;token=72ba62e3c6513b05dacc7f86045d9346%2B%5C" title="Add this page to your watchlist [alt-shift-w]" accesskey="w" style="-webkit-user-select: text;">Watch</a></li>
+					</ul>
+	</div>
+</div>
+
+<!-- /1 -->
+
+<!-- 2 -->
+<div id="p-search" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;"><label for="searchInput" style="-webkit-user-select: text;">Search</label></h5>
+	<form action="http://wiki.oni2.net/w/index.php" id="searchform" style="-webkit-user-select: text;">
+				<div style="-webkit-user-select: text;">
+			<input type="search" name="search" title="Search OniGalore [alt-shift-f]" accesskey="f" id="searchInput" style="-webkit-user-select: text;" autocomplete="off">			<input type="submit" name="go" value="Go" title="Go to a page with this exact name if exists" id="searchGoButton" class="searchButton" style="-webkit-user-select: text;">			<input type="submit" name="fulltext" value="Search" title="Search the pages for this text" id="mw-searchButton" class="searchButton" style="-webkit-user-select: text;">					<input type="hidden" name="title" value="Special:Search" style="-webkit-user-select: text;">
+		</div>
+	</form>
+</div>
+
+<!-- /2 -->
+			</div>
+		</div>
+		<!-- /header -->
+		<!-- panel -->
+			<div id="mw-panel" class="noprint" style="-webkit-user-select: text;">
+				<!-- logo -->
+					<div id="p-logo" style="-webkit-user-select: text;"><a style="background-image: url(&quot;/w/wiki.png&quot;); -webkit-user-select: text;" href="http://wiki.oni2.net/Main_Page" title="Visit the main page"></a></div>
+				<!-- /logo -->
+				
+<!-- navigation -->
+<div class="portal" id="p-navigation" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;">Navigation</h5>
+	<div class="body" style="-webkit-user-select: text;">
+		<ul style="-webkit-user-select: text;">
+			<li id="n-mainpage" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Main_Page" title="Visit the main page [alt-shift-z]" accesskey="z" style="-webkit-user-select: text;">Main Page</a></li>
+			<li id="n-Site-Map" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Site_Map" style="-webkit-user-select: text;">Site Map</a></li>
+			<li id="n-portal" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/OniGalore:Community_portal" title="About the project, what you can do, where to find things" style="-webkit-user-select: text;">Community portal</a></li>
+			<li id="n-currentevents" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/OniGalore:Current_events" title="Find background information on current events" style="-webkit-user-select: text;">Current events</a></li>
+			<li id="n-recentchanges" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:RecentChanges" title="A list of recent changes in the wiki [alt-shift-r]" accesskey="r" style="-webkit-user-select: text;">Recent changes</a></li>
+			<li id="n-randompage" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:Random" title="Load a random page [alt-shift-x]" accesskey="x" style="-webkit-user-select: text;">Random page</a></li>
+			<li id="n-help" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Help:Contents" title="Learn about the wiki!" style="-webkit-user-select: text;">Help</a></li>
+		</ul>
+	</div>
+</div>
+
+<!-- /navigation -->
+
+<!-- SEARCH -->
+
+<!-- /SEARCH -->
+
+<!-- TOOLBOX -->
+<div class="portal" id="p-tb" style="-webkit-user-select: text;">
+	<h5 style="-webkit-user-select: text;">Toolbox</h5>
+	<div class="body" style="-webkit-user-select: text;">
+		<ul style="-webkit-user-select: text;">
+			<li id="t-whatlinkshere" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:WhatLinksHere/XML:SNDD" title="A list of all wiki pages that link here [alt-shift-j]" accesskey="j" style="-webkit-user-select: text;">What links here</a></li>
+			<li id="t-recentchangeslinked" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:RecentChangesLinked/XML:SNDD" title="Recent changes in pages linked from this page [alt-shift-k]" accesskey="k" style="-webkit-user-select: text;">Related changes</a></li>
+			<li id="t-upload" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:Upload" title="Upload files [alt-shift-u]" accesskey="u" style="-webkit-user-select: text;">Upload file</a></li>
+			<li id="t-specialpages" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/Special:SpecialPages" title="A list of all special pages [alt-shift-q]" accesskey="q" style="-webkit-user-select: text;">Special pages</a></li>
+			<li style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;printable=yes" rel="alternate" style="-webkit-user-select: text;">Printable version</a></li>
+			<li id="t-permalink" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/w/index.php?title=XML:SNDD&amp;oldid=25591" title="Permanent link to this revision of the page" style="-webkit-user-select: text;">Permanent link</a></li>
+		</ul>
+	</div>
+</div>
+
+<!-- /TOOLBOX -->
+
+<!-- LANGUAGES -->
+
+<!-- /LANGUAGES -->
+			</div>
+		<!-- /panel -->
+		<!-- footer -->
+		<div id="footer" style="-webkit-user-select: text;">
+							<ul id="footer-info" style="-webkit-user-select: text;">
+											<li id="footer-info-lastmod" style="-webkit-user-select: text;"> This page was last modified on 22 September 2016, at 21:40.</li>
+											<li id="footer-info-viewcount" style="-webkit-user-select: text;">This page has been accessed 4,701 times.</li>
+											<li id="footer-info-copyright" style="-webkit-user-select: text;">Content is available under <a class="external" href="http://www.gnu.org/copyleft/fdl.html" style="-webkit-user-select: text;">GNU Free Documentation License 1.2</a>.</li>
+									</ul>
+							<ul id="footer-places" style="-webkit-user-select: text;">
+											<li id="footer-places-privacy" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/OniGalore:Privacy_policy" title="OniGalore:Privacy policy" style="-webkit-user-select: text;">Privacy policy</a></li>
+											<li id="footer-places-about" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/OniGalore:About" title="OniGalore:About" style="-webkit-user-select: text;">About OniGalore</a></li>
+											<li id="footer-places-disclaimer" style="-webkit-user-select: text;"><a href="http://wiki.oni2.net/OniGalore:General_disclaimer" title="OniGalore:General disclaimer" style="-webkit-user-select: text;">Disclaimers</a></li>
+									</ul>
+										<ul id="footer-icons" class="noprint" style="-webkit-user-select: text;">
+					<li id="footer-copyrightico" style="-webkit-user-select: text;">
+						<a href="http://www.gnu.org/copyleft/fdl.html" style="-webkit-user-select: text;"><img src="./XMLSNDD_files/gnu-fdl.png" alt="GNU Free Documentation License 1.2" width="88" height="31" style="-webkit-user-select: text;"></a>
+					</li>
+					<li id="footer-poweredbyico" style="-webkit-user-select: text;">
+						<a href="http://www.mediawiki.org/" style="-webkit-user-select: text;"><img src="./XMLSNDD_files/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" width="88" height="31" style="-webkit-user-select: text;"></a>
+					</li>
+				</ul>
+						<div style="clear: both; -webkit-user-select: text;"></div>
+		</div>
+		<!-- /footer -->
+		<script src="./XMLSNDD_files/load(5).php" style="-webkit-user-select: text;"></script>
+<script style="-webkit-user-select: text;">if(window.mw){
+mw.loader.load(["mediawiki.user","mediawiki.page.ready","mediawiki.action.watch.ajax","mediawiki.legacy.mwsuggest"], null, true);
+}</script><script src="./XMLSNDD_files/load(6).php" type="text/javascript" style="-webkit-user-select: text;"></script>
+<script src="./XMLSNDD_files/load(7).php" style="-webkit-user-select: text;"></script>
+<!-- Served in 0.211 secs. -->
+	
+
+<div id="ucss-style"><style>undefined</style></div></body></html>
Index: s10k/Vago/help/XMLSNDD_files/load(1).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(1).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(1).php	(revision 1092)
@@ -0,0 +1,3 @@
+#interwiki-completelist{font-weight:bold}body.page-Main_Page #ca-delete{display:none !important}body.page-Main_Page #mp-topbanner{clear:both} body.page-Main_Page h1.firstHeading{display:none} table.hovertable{margin:1em 1em 1em 0;background-color:#f9f9f9;border:1px #aaa solid;border-collapse:collapse;color:black}.hovertable td{border:none;padding:0.2em}.hovertable td.hovercell{border:1px #aaa solid;padding:0.2em}.hovertable td.embedded{background-image:repeating-linear-gradient(-45deg,transparent,transparent 10px,rgba(0,0,255,0.2) 10px,rgba(0,0,255,0.2) 20px);background-image:-webkit-repeating-linear-gradient(-45deg,transparent,transparent 10px,rgba(0,0,255,0.2) 10px,rgba(0,0,255,0.2) 20px)}.hovertable td.hovertable_descrip{border:1px #aaa solid;padding:0.2em;position:fixed} #toolbar{height:22px;margin-bottom:6px} div#content ol,div#content ul,div#mw_content ol,div#mw_content ul{margin-bottom:0.5em} ol.references,div.reflist,div.refbegin{font-size:90%; }div.reflist ol.references{font-size:100%; list-style-type:inherit; } ol.references li:target,sup.reference:target,span.citation:target{background-color:#DEF} sup.reference{font-weight:normal;font-style:normal} span.brokenref{display:none} .citation{word-wrap:break-word} cite,.citation cite.article,.citation cite.contribution{font-style:inherit} .citation cite,.citation cite.periodical{font-style:italic} @media screen,handheld{.citation *.printonly{display:none}} table.navbox{ border:1px solid #aaa;width:100%;margin:auto;clear:both;font-size:88%;text-align:center;padding:1px}table.navbox + table.navbox{ margin-top:-1px; }.navbox-title,.navbox-abovebelow,table.navbox th{text-align:center; padding-left:1em;padding-right:1em}.navbox-group{ white-space:nowrap;text-align:right;font-weight:bold;padding-left:1em;padding-right:1em}.navbox,.navbox-subgroup{background:#fdfdfd; }.navbox-list{border-color:#fdfdfd; }.navbox-title,table.navbox th{background:#ccccff; }.navbox-abovebelow,.navbox-group,.navbox-subgroup .navbox-title{background:#ddddff; }.navbox-subgroup .navbox-group,.navbox-subgroup .navbox-abovebelow{background:#e6e6ff; }.navbox-even{background:#f7f7f7; }.navbox-odd{background:transparent; }.collapseButton{ float:right; font-weight:normal; text-align:right; width:auto}.navbox .collapseButton{ width:6em; } .navbar{ font-size:88%; font-weight:normal}.navbox .navbar{font-size:100%; } .infobox{border:1px solid #aaa;background-color:#f9f9f9;color:black;margin:0.5em 0 0.5em 1em;padding:0.2em;float:right;clear:right;text-align:left;font-size:88%;line-height:1.5em}.infobox caption{font-size:125%;font-weight:bold}.infobox td,.infobox th{vertical-align:top}.infobox.bordered{border-collapse:collapse}.infobox.bordered td,.infobox.bordered th{border:1px solid #aaa}.infobox.bordered .borderless td,.infobox.bordered .borderless th{border:0}.infobox.sisterproject{width:20em;font-size:90%}.infobox.standard-talk{border:1px solid #c0c090;background-color:#f8eaba}.infobox.standard-talk.bordered td,.infobox.standard-talk.bordered th{border:1px solid #c0c090} .infobox.bordered .mergedtoprow td,.infobox.bordered .mergedtoprow th{border:0;border-top:1px solid #aaa;border-right:1px solid #aaa}.infobox.bordered .mergedrow td,.infobox.bordered .mergedrow th{border:0;border-right:1px solid #aaa} .wikitable.plainrowheaders th[scope=row]{font-weight:normal;text-align:left} .wikitable td ul,.wikitable td ol,.wikitable td dl{text-align:left} div.columns-2 div.column{float:left;width:50%;min-width:300px}div.columns-3 div.column{float:left;width:33.3%;min-width:200px}div.columns-4 div.column{float:left;width:25%;min-width:150px}div.columns-5 div.column{float:left;width:20%;min-width:120px} .messagebox{border:1px solid #aaa;background-color:#f9f9f9;width:80%;margin:0 auto 1em auto;padding:.2em}.messagebox.merge{border:1px solid #c0b8cc;background-color:#f0e5ff;text-align:center}.messagebox.cleanup{border:1px solid #9f9fff;background-color:#efefff;text-align:center}.messagebox.standard-talk{border:1px solid #c0c090;background-color:#f8eaba;margin:4px auto} .mbox-inside .standard-talk,.messagebox.nested-talk{border:1px solid #c0c090;background-color:#f8eaba;width:100%;margin:2px 0;padding:2px}.messagebox.small{width:238px;font-size:85%;float:right;clear:both;margin:0 0 1em 1em;line-height:1.25em}.messagebox.small-talk{width:238px;font-size:85%;float:right;clear:both;margin:0 0 1em 1em;line-height:1.25em;background:#F8EABA} th.mbox-text,td.mbox-text{ border:none;padding:0.25em 0.9em; width:100%; }td.mbox-image{ border:none;padding:2px 0 2px 0.9em; text-align:center}td.mbox-imageright{ border:none;padding:2px 0.9em 2px 0; text-align:center}td.mbox-empty-cell{ border:none;padding:0px;width:1px} table.ambox{margin:0px 10%; border:1px solid #aaa;border-left:10px solid #1e90ff; background:#fbfbfb}table.ambox + table.ambox{ margin-top:-1px}.ambox th.mbox-text,.ambox td.mbox-text{ padding:0.25em 0.5em; }.ambox td.mbox-image{ padding:2px 0 2px 0.5em; }.ambox td.mbox-imageright{ padding:2px 0.5em 2px 0; }table.ambox-notice{border-left:10px solid #1e90ff; }table.ambox-speedy{border-left:10px solid #b22222; background:#fee; }table.ambox-delete{border-left:10px solid #b22222; }table.ambox-content{border-left:10px solid #f28500; }table.ambox-style{border-left:10px solid #f4c430; }table.ambox-move{border-left:10px solid #9932cc; }table.ambox-protection{border-left:10px solid #bba; } table.imbox{margin:4px 10%;border-collapse:collapse;border:3px solid #1e90ff; background:#fbfbfb}.imbox .mbox-text .imbox{ margin:0 -0.5em; display:block; }.mbox-inside .imbox{ margin:4px}table.imbox-notice{border:3px solid #1e90ff; }table.imbox-speedy{border:3px solid #b22222; background:#fee; }table.imbox-delete{border:3px solid #b22222; }table.imbox-content{border:3px solid #f28500; }table.imbox-style{border:3px solid #f4c430; }table.imbox-move{border:3px solid #9932cc; }table.imbox-protection{border:3px solid #bba; }table.imbox-license{border:3px solid #88a; background:#f7f8ff; }table.imbox-featured{border:3px solid #cba135; } table.cmbox{margin:3px 10%;border-collapse:collapse;border:1px solid #aaa;background:#DFE8FF; }table.cmbox-notice{background:#D8E8FF; }table.cmbox-speedy{margin-top:4px;margin-bottom:4px;border:4px solid #b22222; background:#FFDBDB; }table.cmbox-delete{background:#FFDBDB; }table.cmbox-content{background:#FFE7CE; }table.cmbox-style{background:#FFF9DB; }table.cmbox-move{background:#E4D8FF; }table.cmbox-protection{background:#EFEFE1; } table.ombox{margin:4px 10%;border-collapse:collapse;border:1px solid #aaa; background:#f9f9f9}table.ombox-notice{border:1px solid #aaa; }table.ombox-speedy{border:2px solid #b22222; background:#fee; }table.ombox-delete{border:2px solid #b22222; }table.ombox-content{border:1px solid #f28500; }table.ombox-style{border:1px solid #f4c430; }table.ombox-move{border:1px solid #9932cc; }table.ombox-protection{border:2px solid #bba; } table.tmbox{margin:4px 10%;border-collapse:collapse;border:1px solid #c0c090; background:#f8eaba}.mediawiki .mbox-inside .tmbox{ margin:2px 0; width:100%; }.mbox-inside .tmbox.mbox-small{ line-height:1.5em; font-size:100%; }table.tmbox-speedy{border:2px solid #b22222; background:#fee; }table.tmbox-delete{border:2px solid #b22222; }table.tmbox-content{border:2px solid #f28500; }table.tmbox-style{border:2px solid #f4c430; }table.tmbox-move{border:2px solid #9932cc; }table.tmbox-protection,table.tmbox-notice{border:1px solid #c0c090; } table.dmbox{clear:both;margin:0.9em 1em;border-top:1px solid #ccc;border-bottom:1px solid #ccc;background:transparent} table.fmbox{clear:both;margin:0.2em 0;width:100%;border:1px solid #aaa;background:#f9f9f9; }table.fmbox-system{background:#f9f9f9}table.fmbox-warning{border:1px solid #bb7070; background:#ffdbdb; }table.fmbox-editnotice{background:transparent} div.mw-warning-with-logexcerpt,div.mw-lag-warn-high,div.mw-cascadeprotectedwarning,div#mw-protect-cascadeon{clear:both;margin:0.2em 0;border:1px solid #bb7070;background:#ffdbdb;padding:0.25em 0.9em} div.mw-lag-warn-normal,div.fmbox-system{clear:both;margin:0.2em 0;border:1px solid #aaa;background:#f9f9f9;padding:0.25em 0.9em} body.mediawiki table.mbox-small{ clear:right;float:right;margin:4px 0 4px 1em;width:238px;font-size:88%;line-height:1.25em}body.mediawiki table.mbox-small-left{ margin:4px 1em 4px 0;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em} .check-icon a.new{display:none;speak:none} .nounderlines a,.IPA a:link,.IPA a:visited{text-decoration:none} div.NavFrame{margin:0;padding:4px;border:1px solid #aaa;text-align:center;border-collapse:collapse;font-size:95%}div.NavFrame + div.NavFrame{border-top-style:none;border-top-style:hidden}div.NavPic{background-color:#fff;margin:0;padding:2px;float:left}div.NavFrame div.NavHead{height:1.6em;font-weight:bold;background-color:#ccf;position:relative}div.NavFrame p,div.NavFrame div.NavContent,div.NavFrame div.NavContent p{font-size:100%}div.NavEnd{margin:0;padding:0;line-height:1px;clear:both}a.NavToggle{position:absolute;top:0;right:3px;font-weight:normal;font-size:90%} .rellink,.dablink{font-style:italic;padding-left:2em;margin-bottom:0.5em}.rellink i,.dablink i{font-style:normal} .horizontal ul{padding:0;margin:0}.horizontal li{padding:0 0.6em 0 0.4em;display:inline;border-right:1px solid}.horizontal li:last-child{border-right:none;padding-right:0} .listify td{display:list-item}.listify tr{display:block}.listify table{display:block} .nonumtoc .tocnumber{display:none}.nonumtoc #toc ul,.nonumtoc .toc ul{line-height:1.5em;list-style:none;margin:.3em 0 0;padding:0}.nonumtoc #toc ul ul,.nonumtoc .toc ul ul{margin:0 0 0 2em} .toclimit-2 .toclevel-1 ul,.toclimit-3 .toclevel-2 ul,.toclimit-4 .toclevel-3 ul,.toclimit-5 .toclevel-4 ul,.toclimit-6 .toclevel-5 ul,.toclimit-7 .toclevel-6 ul{display:none} div.user-block{padding:5px;margin-bottom:0.5em;border:1px solid #A9A9A9;background-color:#FFEFD5} .nowraplinks a,.nowraplinks .selflink,span.texhtml,sup.reference a{white-space:nowrap} .template-documentation{clear:both;margin:1em 0 0 0;border:1px solid #aaa;background-color:#ecfcf4;padding:1em} .imagemap-inline div{display:inline} #wpUploadDescription{height:13em} sup,sub{line-height:1em} .thumbinner{min-width:100px}  div.thumb img.thumbimage{background-color:#fff} div#content .gallerybox div.thumb{background-color:#F9F9F9; } .gallerybox .thumb img,.filehistory a img,#file img{background:white url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png") repeat} .ns-0 .gallerybox .thumb img,.ns-2 .gallerybox .thumb img,.ns-100 .gallerybox .thumb img,.nochecker .gallerybox .thumb img{background:white} #mw-subcategories,#mw-pages,#mw-category-media,#filehistory,#wikiPreview,#wikiDiff{clear:both} .wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax,.wikiEditor-ui-toolbar .section-help .page-table td.syntax{font-family:monospace,"Courier New"} div.mw-geshi div,div.mw-geshi div pre,span.mw-geshi,tt,code,pre{font-family:monospace,"Courier New" !important;font-size:100%} ul.permissions-errors > li{list-style:none}ul.permissions-errors{margin:0} body.page-Special_UserLogin .mw-label label,body.page-Special_UserLogin_signup .mw-label label{white-space :nowrap} @media only screen and (max-device-width:480px){body{-webkit-text-size-adjust:none}} .transborder{border:solid transparent}* html .transborder{ border:solid #000001;filter:chroma(color=#000001)} ol.hlist,ul.hlist,.hlist ol,.hlist ul{margin:0 !important}.hlist li{padding:0em 0.6em 0em 0em;display:inline;background:url("http://upload.wikimedia.org/wikipedia/commons/d/da/Middot.png") no-repeat right}.hlist li:last-child{padding-right:0em;background:none} .breadcrumb{list-style:none;overflow:hidden;font:14px Helvetica,Arial,Sans-Serif}.breadcrumb li{float:left;margin-bottom:0}.breadcrumb li a{color:white;text-decoration:none;padding:10px 0 10px 45px;position:relative;display:block;float:left}.breadcrumb li a:after,.breadcrumb li a:before{content:" ";display:block;width:0;height:0;border-top:50px solid transparent; border-bottom:50px solid transparent;position:absolute;top:50%;margin-top:-50px;left:100%;z-index:2}.breadcrumb li a:before{border-left:31px solid white;margin-left:1px;z-index:1}.breadcrumb li:first-child a{padding-left:20px}.currentcrumb a{background:#069}.currentcrumb a:after{border-left:30px solid #069}.currentcrumb a:hover,.prevcrumb a:hover,.nextcrumb a:hover{background:#002d44}.currentcrumb a:hover:after,.prevcrumb a:hover:after,.nextcrumb a:hover:after{border-left-color:#002d44 !important}.prevcrumb a{background:#396}.prevcrumb a:after{border-left:30px solid #396}.nextcrumb a{background:#999}.nextcrumb a:after{border-left:30px solid #999} #userlogin{margin:0;width:90% !important;max-width:100% !important;padding:1.5em;padding-top:0.75em !important;border:0;-moz-box-shadow:inset 0 0px 10px rgba(0,0,0,0.35);-webkit-box-shadow:inset 0 0px 10px rgba(0,0,0,0.35);box-shadow:inset 0 0px 10px rgba(0,0,0,0.35);-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;background:white;background:#fff;background:-moz-linear-gradient(bottom,#fff 90%,#F5F5F5 100%);background:-webkit-gradient(linear,left bottom,left top,color-stop(90%,#fff),color-stop(100%,#F5F5F5));background:-webkit-linear-gradient(bottom,#fff 90%,#F5F5F5 100%);background:-o-linear-gradient(bottom,#fff 90%,#F5F5F5 100%);background:-ms-linear-gradient(bottom,#fff 90%,#F5F5F5 100%);background:linear-gradient(bottom,#fff 90%,#fff 100%)} div#content a.external[href ^="https://"]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC)} .BSLFuncInfo{background:rgb(242,242,242);border-style:solid;border-color:rgb(125,125,125);border-radius:0.33em;border-width:0px 2px 2px 0px;padding:0px 0px 0px 10px} .BSLVarInfo{background:rgb(242,242,242);border-style:solid;border-color:rgb(125,125,125);border-radius:0.33em;border-width:0px 2px 2px 0px;padding:0px 10px 10px 10px}   div#mw-panel{position:fixed;height:100%; background-color:#F6F6F6;border-right:1px solid #A7D7F9} code{background-color:rgb(245,245,245)} table.diff,td.diff-otitle,td.diff-ntitle{background-color:white}td.diff-otitle,td.diff-ntitle{text-align:center} td.diff-marker{text-align:right;font-weight:bold;font-size:1.25em}td.diff-lineno{font-weight:bold}td.diff-addedline,td.diff-deletedline,td.diff-context{font-size:100%;vertical-align:center;white-space:-moz-pre-wrap;white-space:pre-wrap} td.diff-addedline,td.diff-deletedline{border-style:solid; border-width:1px 1px 1px 4px;border-radius:0.33em} td.diff-addedline{border-color:rgb(155,236,155)}td.diff-deletedline{border-color:rgb(255,228,156)} td.diff-addedline .diffchange,td.diff-deletedline .diffchange{background:rgb(215,175,255)} td.diff-context{background:rgb(242,242,242);color:rgb(51,51,51);border-style:solid;border-width:1px 1px 1px 4px;border-color:rgb(230,230,230);border-radius:0.33em} .diffchange{color:black;font-weight:bold;text-decoration:none}table.diff{border:none;width:98%;border-spacing:4px; table-layout:fixed}td.diff-addedline .diffchange,td.diff-deletedline .diffchange{border-radius:0.33em;padding:0.25em 0}table.diff td{padding:0.33em 0.66em;line-height:1.65em}table.diff col.diff-marker{width:2%}table.diff col.diff-content{width:48%}table.diff td div{ word-wrap:break-word; overflow:auto}@media print{  }
+
+/* cache key: oni_wiki:resourceloader:filter:minify-css:7:5a4937e3641a8b2f5057fceea62d6f5f */
Index: s10k/Vago/help/XMLSNDD_files/load(2).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(2).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(2).php	(revision 1092)
@@ -0,0 +1,14 @@
+var isCompatible=function(){if(navigator.appVersion.indexOf('MSIE')!==-1&&parseFloat(navigator.appVersion.split('MSIE')[1])<6){return false;}return true;};var startUp=function(){mw.config=new mw.Map(true);mw.loader.addSource({"local":{"loadScript":"/w/load.php","apiScript":"/w/api.php"}});mw.loader.register([["site","1450799798",[],"site"],["noscript","1365164811",[],"noscript"],["startup","1476182232",[],"startup"],["user","1365164811",[],"user"],["user.groups","1365164811",[],"user"],["user.options","1476182232",[],"private"],["user.cssprefs","1476182232",["mediawiki.user"],"private"],["user.tokens","1365164811",[],"private"],["filepage","1365164811",[]],["skins.chick","1365164811",[]],["skins.cologneblue","1365164811",[]],["skins.modern","1365164811",[]],["skins.monobook","1365164811",[]],["skins.nostalgia","1365164811",[]],["skins.simple","1365164811",[]],["skins.standard","1365164811",[]],["skins.vector","1365164811",[]],["jquery","1365164811",[]],["jquery.appear","1365164811",[]]
+,["jquery.arrowSteps","1365164811",[]],["jquery.async","1365164811",[]],["jquery.autoEllipsis","1365164811",["jquery.highlightText"]],["jquery.byteLength","1365164811",[]],["jquery.byteLimit","1365164811",["jquery.byteLength"]],["jquery.checkboxShiftClick","1365164811",[]],["jquery.client","1365164811",[]],["jquery.collapsibleTabs","1365164811",[]],["jquery.color","1365164811",["jquery.colorUtil"]],["jquery.colorUtil","1365164811",[]],["jquery.cookie","1365164811",[]],["jquery.delayedBind","1365164811",[]],["jquery.expandableField","1365164811",["jquery.delayedBind"]],["jquery.farbtastic","1365164811",["jquery.colorUtil"]],["jquery.footHovzer","1365164811",[]],["jquery.form","1365164811",[]],["jquery.getAttrs","1365164811",[]],["jquery.highlightText","1365164811",[]],["jquery.hoverIntent","1365164811",[]],["jquery.json","1365164811",[]],["jquery.localize","1365164811",[]],["jquery.makeCollapsible","1365164817",[]],["jquery.messageBox","1365164811",[]],["jquery.mockjax","1365164811",[]]
+,["jquery.mw-jump","1365164811",[]],["jquery.mwExtension","1365164811",[]],["jquery.placeholder","1365164811",[]],["jquery.qunit","1365164811",[]],["jquery.qunit.completenessTest","1365164811",["jquery.qunit"]],["jquery.spinner","1365164811",[]],["jquery.suggestions","1365164811",["jquery.autoEllipsis"]],["jquery.tabIndex","1365164811",[]],["jquery.tablesorter","1447361306",[]],["jquery.textSelection","1365164811",[]],["jquery.validate","1365164811",[]],["jquery.xmldom","1365164811",[]],["jquery.tipsy","1365164811",[]],["jquery.ui.core","1365164811",["jquery"],"jquery.ui"],["jquery.ui.widget","1365164811",[],"jquery.ui"],["jquery.ui.mouse","1365164811",["jquery.ui.widget"],"jquery.ui"],["jquery.ui.position","1365164811",[],"jquery.ui"],["jquery.ui.draggable","1365164811",["jquery.ui.core","jquery.ui.mouse","jquery.ui.widget"],"jquery.ui"],["jquery.ui.droppable","1365164811",["jquery.ui.core","jquery.ui.mouse","jquery.ui.widget","jquery.ui.draggable"],"jquery.ui"],["jquery.ui.resizable"
+,"1365164811",["jquery.ui.core","jquery.ui.widget","jquery.ui.mouse"],"jquery.ui"],["jquery.ui.selectable","1365164811",["jquery.ui.core","jquery.ui.widget","jquery.ui.mouse"],"jquery.ui"],["jquery.ui.sortable","1365164811",["jquery.ui.core","jquery.ui.widget","jquery.ui.mouse"],"jquery.ui"],["jquery.ui.accordion","1365164811",["jquery.ui.core","jquery.ui.widget"],"jquery.ui"],["jquery.ui.autocomplete","1365164811",["jquery.ui.core","jquery.ui.widget","jquery.ui.position"],"jquery.ui"],["jquery.ui.button","1365164811",["jquery.ui.core","jquery.ui.widget"],"jquery.ui"],["jquery.ui.datepicker","1365164811",["jquery.ui.core"],"jquery.ui"],["jquery.ui.dialog","1365164811",["jquery.ui.core","jquery.ui.widget","jquery.ui.button","jquery.ui.draggable","jquery.ui.mouse","jquery.ui.position","jquery.ui.resizable"],"jquery.ui"],["jquery.ui.progressbar","1365164811",["jquery.ui.core","jquery.ui.widget"],"jquery.ui"],["jquery.ui.slider","1365164811",["jquery.ui.core","jquery.ui.widget",
+"jquery.ui.mouse"],"jquery.ui"],["jquery.ui.tabs","1365164811",["jquery.ui.core","jquery.ui.widget"],"jquery.ui"],["jquery.effects.core","1365164811",["jquery"],"jquery.ui"],["jquery.effects.blind","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.bounce","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.clip","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.drop","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.explode","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.fade","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.fold","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.highlight","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.pulsate","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.scale","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.shake","1365164811",["jquery.effects.core"],"jquery.ui"],[
+"jquery.effects.slide","1365164811",["jquery.effects.core"],"jquery.ui"],["jquery.effects.transfer","1365164811",["jquery.effects.core"],"jquery.ui"],["mediawiki","1365164811",[]],["mediawiki.api","1365164811",["mediawiki.util"]],["mediawiki.api.category","1365164811",["mediawiki.api","mediawiki.Title"]],["mediawiki.api.edit","1365164811",["mediawiki.api","mediawiki.Title"]],["mediawiki.api.parse","1365164811",["mediawiki.api"]],["mediawiki.api.titleblacklist","1365164811",["mediawiki.api","mediawiki.Title"]],["mediawiki.api.watch","1365164811",["mediawiki.api","mediawiki.user"]],["mediawiki.debug","1365164811",["jquery.footHovzer"]],["mediawiki.debug.init","1365164811",["mediawiki.debug"]],["mediawiki.feedback","1365164811",["mediawiki.api.edit","mediawiki.Title","mediawiki.jqueryMsg","jquery.ui.dialog"]],["mediawiki.htmlform","1365164811",[]],["mediawiki.Title","1365164811",["mediawiki.util"]],["mediawiki.Uri","1365164811",[]],["mediawiki.user","1365164811",["jquery.cookie"]],[
+"mediawiki.util","1365164816",["jquery.client","jquery.cookie","jquery.messageBox","jquery.mwExtension"]],["mediawiki.action.edit","1365164811",["jquery.textSelection","jquery.byteLimit"]],["mediawiki.action.history","1365164811",["jquery.ui.button"],"mediawiki.action.history"],["mediawiki.action.history.diff","1365164811",[],"mediawiki.action.history"],["mediawiki.action.view.dblClickEdit","1365164811",["mediawiki.util"]],["mediawiki.action.view.metadata","1365177947",[]],["mediawiki.action.view.rightClickEdit","1365164811",[]],["mediawiki.action.watch.ajax","1365164817",["mediawiki.api.watch","mediawiki.util"]],["mediawiki.language","1365164811",[]],["mediawiki.jqueryMsg","1365164811",["mediawiki.language","mediawiki.util"]],["mediawiki.libs.jpegmeta","1365164811",[]],["mediawiki.page.ready","1365164811",["jquery.checkboxShiftClick","jquery.makeCollapsible","jquery.placeholder","jquery.mw-jump","mediawiki.util"]],["mediawiki.page.startup","1365164811",["jquery.client",
+"mediawiki.util"]],["mediawiki.special","1365164811",[]],["mediawiki.special.block","1365164811",["mediawiki.util"]],["mediawiki.special.changeemail","1429338705",["mediawiki.util"]],["mediawiki.special.changeslist","1365164811",["jquery.makeCollapsible"]],["mediawiki.special.movePage","1365164811",["jquery.byteLimit"]],["mediawiki.special.preferences","1365164811",[]],["mediawiki.special.recentchanges","1365164811",["mediawiki.special"]],["mediawiki.special.search","1365164811",[]],["mediawiki.special.undelete","1365164811",[]],["mediawiki.special.upload","1365217956",["mediawiki.libs.jpegmeta","mediawiki.util"]],["mediawiki.special.javaScriptTest","1365164811",["jquery.qunit"]],["mediawiki.tests.qunit.testrunner","1365164811",["jquery.qunit","jquery.qunit.completenessTest","mediawiki.page.startup","mediawiki.page.ready"]],["mediawiki.legacy.ajax","1365164811",["mediawiki.util","mediawiki.legacy.wikibits"]],["mediawiki.legacy.commonPrint","1365164811",[]],["mediawiki.legacy.config",
+"1365164811",["mediawiki.legacy.wikibits"]],["mediawiki.legacy.IEFixes","1365164811",["mediawiki.legacy.wikibits"]],["mediawiki.legacy.mwsuggest","1365164817",["mediawiki.legacy.wikibits"]],["mediawiki.legacy.preview","1365164811",["mediawiki.legacy.wikibits"]],["mediawiki.legacy.protect","1365164811",["mediawiki.legacy.wikibits","jquery.byteLimit"]],["mediawiki.legacy.shared","1365164811",[]],["mediawiki.legacy.oldshared","1365164811",[]],["mediawiki.legacy.upload","1365164811",["mediawiki.legacy.wikibits","mediawiki.util"]],["mediawiki.legacy.wikibits","1365164811",["mediawiki.util"]],["mediawiki.legacy.wikiprintable","1365164811",[]],["ext.categoryTree","1365168213",[]],["ext.categoryTree.css","1365164811",[]],["ext.confirmAccount","1365164811",[]],["ext.cite","1365164811",["jquery.tooltip"]],["jquery.tooltip","1365164811",[]]]);mw.config.set({"wgLoadScript":"/w/load.php","debug":false,"skin":"vector","stylepath":"/w/skins","wgUrlProtocols":
+"http\\:\\/\\/|https\\:\\/\\/|ftp\\:\\/\\/|irc\\:\\/\\/|ircs\\:\\/\\/|gopher\\:\\/\\/|telnet\\:\\/\\/|nntp\\:\\/\\/|worldwind\\:\\/\\/|mailto\\:|news\\:|svn\\:\\/\\/|git\\:\\/\\/|mms\\:\\/\\/|\\/\\/","wgArticlePath":"/$1","wgScriptPath":"/w","wgScriptExtension":".php","wgScript":"/w/index.php","wgVariantArticlePath":false,"wgActionPaths":{},"wgServer":"http://wiki.oni2.net","wgUserLanguage":"en","wgContentLanguage":"en","wgVersion":"1.19.2","wgEnableAPI":true,"wgEnableWriteAPI":true,"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgMainPageTitle":"Main Page","wgFormattedNamespaces":{"-2":"Media","-1":"Special","0":"","1":"Talk","2":"User","3":"User talk","4":"OniGalore","5":"OniGalore talk","6":"File","7":"File talk","8":"MediaWiki","9":"MediaWiki talk","10":"Template","11":
+"Template talk","12":"Help","13":"Help talk","14":"Category","15":"Category talk","100":"BSL","101":"BSL talk","102":"OBD","103":"OBD talk","104":"AE","105":"AE talk","108":"Oni2","109":"Oni2 talk","110":"XML","111":"XML talk"},"wgNamespaceIds":{"media":-2,"special":-1,"":0,"talk":1,"user":2,"user_talk":3,"onigalore":4,"onigalore_talk":5,"file":6,"file_talk":7,"mediawiki":8,"mediawiki_talk":9,"template":10,"template_talk":11,"help":12,"help_talk":13,"category":14,"category_talk":15,"bsl":100,"bsl_talk":101,"obd":102,"obd_talk":103,"ae":104,"ae_talk":105,"oni2":108,"oni2_talk":109,"xml":110,"xml_talk":111,"image":6,"image_talk":7,"project":4,"project_talk":5},"wgSiteName":"OniGalore","wgFileExtensions":["png","gif","jpg","jpeg"],"wgDBname":"oni_wiki","wgFileCanRotate":true,"wgAvailableSkins":{"chick":"Chick","monobook":"MonoBook","modern":"Modern","vector":"Vector","myskin":"MySkin","cologneblue":"CologneBlue","standard":"Standard","simple":"Simple","nostalgia":"Nostalgia"},
+"wgExtensionAssetsPath":"/w/extensions","wgCookiePrefix":"oni_wiki","wgResourceLoaderMaxQueryLength":-1,"wgCaseSensitiveNamespaces":[],"wgMWSuggestTemplate":"http://wiki.oni2.net/w/api.php?action=opensearch\x26search={searchTerms}\x26namespace={namespaces}\x26suggest"});};if(isCompatible()){document.write("\x3cscript src=\"/w/load.php?debug=false\x26amp;lang=en\x26amp;modules=jquery%2Cmediawiki\x26amp;only=scripts\x26amp;skin=vector\x26amp;version=20120830T222535Z\"\x3e\x3c/script\x3e");}delete isCompatible;;
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:e2d4a37b63d3fee6ae1e1164d66ad1ec */
Index: s10k/Vago/help/XMLSNDD_files/load(3).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(3).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(3).php	(revision 1092)
@@ -0,0 +1,159 @@
+(function(window,undefined){var document=window.document,navigator=window.navigator,location=window.location;var jQuery=(function(){var jQuery=function(selector,context){return new jQuery.fn.init(selector,context,rootjQuery);},_jQuery=window.jQuery,_$=window.$,rootjQuery,quickExpr=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,rnotwhite=/\S/,trimLeft=/^\s+/,trimRight=/\s+$/,rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,rvalidchars=/^[\],:{}\s]*$/,rvalidescape=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rvalidtokens=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rvalidbraces=/(?:^|:|,)(?:\s*\[)+/g,rwebkit=/(webkit)[ \/]([\w.]+)/,ropera=/(opera)(?:.*version)?[ \/]([\w.]+)/,rmsie=/(msie) ([\w.]+)/,rmozilla=/(mozilla)(?:.*? rv:([\w.]+))?/,rdashAlpha=/-([a-z]|[0-9])/ig,rmsPrefix=/^-ms-/,fcamelCase=function(all,letter){return(letter+"").toUpperCase();},userAgent=navigator.userAgent,browserMatch,readyList,DOMContentLoaded,toString=Object.prototype.toString,hasOwn=Object.prototype.
+hasOwnProperty,push=Array.prototype.push,slice=Array.prototype.slice,trim=String.prototype.trim,indexOf=Array.prototype.indexOf,class2type={};jQuery.fn=jQuery.prototype={constructor:jQuery,init:function(selector,context,rootjQuery){var match,elem,ret,doc;if(!selector){return this;}if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this;}if(selector==="body"&&!context&&document.body){this.context=document;this[0]=document.body;this.selector=selector;this.length=1;return this;}if(typeof selector==="string"){if(selector.charAt(0)==="<"&&selector.charAt(selector.length-1)===">"&&selector.length>=3){match=[null,selector,null];}else{match=quickExpr.exec(selector);}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;doc=(context?context.ownerDocument||context:document);ret=rsingleTag.exec(selector);if(ret){if(jQuery.isPlainObject(context)){selector=[document.createElement(ret[1])];jQuery.fn.attr.call(selector,context,true);}
+else{selector=[doc.createElement(ret[1])];}}else{ret=jQuery.buildFragment([match[1]],[doc]);selector=(ret.cacheable?jQuery.clone(ret.fragment):ret.fragment).childNodes;}return jQuery.merge(this,selector);}else{elem=document.getElementById(match[2]);if(elem&&elem.parentNode){if(elem.id!==match[2]){return rootjQuery.find(selector);}this.length=1;this[0]=elem;}this.context=document;this.selector=selector;return this;}}else if(!context||context.jquery){return(context||rootjQuery).find(selector);}else{return this.constructor(context).find(selector);}}else if(jQuery.isFunction(selector)){return rootjQuery.ready(selector);}if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context;}return jQuery.makeArray(selector,this);},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length;},toArray:function(){return slice.call(this,0);},get:function(num){return num==null?this.toArray():(num<0?this[this.length+num]:this[num]);},pushStack:function(elems,
+name,selector){var ret=this.constructor();if(jQuery.isArray(elems)){push.apply(ret,elems);}else{jQuery.merge(ret,elems);}ret.prevObject=this;ret.context=this.context;if(name==="find"){ret.selector=this.selector+(this.selector?" ":"")+selector;}else if(name){ret.selector=this.selector+"."+name+"("+selector+")";}return ret;},each:function(callback,args){return jQuery.each(this,callback,args);},ready:function(fn){jQuery.bindReady();readyList.add(fn);return this;},eq:function(i){i=+i;return i===-1?this.slice(i):this.slice(i,i+1);},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},slice:function(){return this.pushStack(slice.apply(this,arguments),"slice",slice.call(arguments).join(","));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},end:function(){return this.prevObject||this.constructor(null);},push:push,sort:[].sort,splice:[].splice};jQuery.fn.init.prototype=jQuery.fn;jQuery.extend=jQuery.fn.
+extend=function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2;}if(typeof target!=="object"&&!jQuery.isFunction(target)){target={};}if(length===i){target=this;--i;}for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){src=target[name];copy=options[name];if(target===copy){continue;}if(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&jQuery.isArray(src)?src:[];}else{clone=src&&jQuery.isPlainObject(src)?src:{};}target[name]=jQuery.extend(deep,clone,copy);}else if(copy!==undefined){target[name]=copy;}}}}return target;};jQuery.extend({noConflict:function(deep){if(window.$===jQuery){window.$=_$;}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery;}return jQuery;},isReady:false,readyWait:1,holdReady:function(hold){if(hold){jQuery.readyWait++;}else{jQuery.ready(true);}}
+,ready:function(wait){if((wait===true&&!--jQuery.readyWait)||(wait!==true&&!jQuery.isReady)){if(!document.body){return setTimeout(jQuery.ready,1);}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return;}readyList.fireWith(document,[jQuery]);if(jQuery.fn.trigger){jQuery(document).trigger("ready").off("ready");}}},bindReady:function(){if(readyList){return;}readyList=jQuery.Callbacks("once memory");if(document.readyState==="complete"){return setTimeout(jQuery.ready,1);}if(document.addEventListener){document.addEventListener("DOMContentLoaded",DOMContentLoaded,false);window.addEventListener("load",jQuery.ready,false);}else if(document.attachEvent){document.attachEvent("onreadystatechange",DOMContentLoaded);window.attachEvent("onload",jQuery.ready);var toplevel=false;try{toplevel=window.frameElement==null;}catch(e){}if(document.documentElement.doScroll&&toplevel){doScrollCheck();}}},isFunction:function(obj){return jQuery.type(obj)==="function";},isArray:Array.isArray||function(obj
+){return jQuery.type(obj)==="array";},isWindow:function(obj){return obj&&typeof obj==="object"&&"setInterval"in obj;},isNumeric:function(obj){return!isNaN(parseFloat(obj))&&isFinite(obj);},type:function(obj){return obj==null?String(obj):class2type[toString.call(obj)]||"object";},isPlainObject:function(obj){if(!obj||jQuery.type(obj)!=="object"||obj.nodeType||jQuery.isWindow(obj)){return false;}try{if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){return false;}}catch(e){return false;}var key;for(key in obj){}return key===undefined||hasOwn.call(obj,key);},isEmptyObject:function(obj){for(var name in obj){return false;}return true;},error:function(msg){throw new Error(msg);},parseJSON:function(data){if(typeof data!=="string"||!data){return null;}data=jQuery.trim(data);if(window.JSON&&window.JSON.parse){return window.JSON.parse(data);}if(rvalidchars.test(data.replace(rvalidescape,"@").replace(rvalidtokens,"]").replace(rvalidbraces,
+""))){return(new Function("return "+data))();}jQuery.error("Invalid JSON: "+data);},parseXML:function(data){var xml,tmp;try{if(window.DOMParser){tmp=new DOMParser();xml=tmp.parseFromString(data,"text/xml");}else{xml=new ActiveXObject("Microsoft.XMLDOM");xml.async="false";xml.loadXML(data);}}catch(e){xml=undefined;}if(!xml||!xml.documentElement||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data);}return xml;},noop:function(){},globalEval:function(data){if(data&&rnotwhite.test(data)){(window.execScript||function(data){window["eval"].call(window,data);})(data);}},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase);},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()===name.toUpperCase();},each:function(object,callback,args){var name,i=0,length=object.length,isObj=length===undefined||jQuery.isFunction(object);if(args){if(isObj){for(name in object){if(callback.apply(object[name],args)===
+false){break;}}}else{for(;i<length;){if(callback.apply(object[i++],args)===false){break;}}}}else{if(isObj){for(name in object){if(callback.call(object[name],name,object[name])===false){break;}}}else{for(;i<length;){if(callback.call(object[i],i,object[i++])===false){break;}}}}return object;},trim:trim?function(text){return text==null?"":trim.call(text);}:function(text){return text==null?"":text.toString().replace(trimLeft,"").replace(trimRight,"");},makeArray:function(array,results){var ret=results||[];if(array!=null){var type=jQuery.type(array);if(array.length==null||type==="string"||type==="function"||type==="regexp"||jQuery.isWindow(array)){push.call(ret,array);}else{jQuery.merge(ret,array);}}return ret;},inArray:function(elem,array,i){var len;if(array){if(indexOf){return indexOf.call(array,elem,i);}len=array.length;i=i?i<0?Math.max(0,len+i):i:0;for(;i<len;i++){if(i in array&&array[i]===elem){return i;}}}return-1;},merge:function(first,second){var i=first.length,j=0;if(typeof second.
+length==="number"){for(var l=second.length;j<l;j++){first[i++]=second[j];}}else{while(second[j]!==undefined){first[i++]=second[j++];}}first.length=i;return first;},grep:function(elems,callback,inv){var ret=[],retVal;inv=!!inv;for(var i=0,length=elems.length;i<length;i++){retVal=!!callback(elems[i],i);if(inv!==retVal){ret.push(elems[i]);}}return ret;},map:function(elems,callback,arg){var value,key,ret=[],i=0,length=elems.length,isArray=elems instanceof jQuery||length!==undefined&&typeof length==="number"&&((length>0&&elems[0]&&elems[length-1])||length===0||jQuery.isArray(elems));if(isArray){for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret[ret.length]=value;}}}else{for(key in elems){value=callback(elems[key],key,arg);if(value!=null){ret[ret.length]=value;}}}return ret.concat.apply([],ret);},guid:1,proxy:function(fn,context){if(typeof context==="string"){var tmp=fn[context];context=fn;fn=tmp;}if(!jQuery.isFunction(fn)){return undefined;}var args=slice.call(arguments,2
+),proxy=function(){return fn.apply(context,args.concat(slice.call(arguments)));};proxy.guid=fn.guid=fn.guid||proxy.guid||jQuery.guid++;return proxy;},access:function(elems,key,value,exec,fn,pass){var length=elems.length;if(typeof key==="object"){for(var k in key){jQuery.access(elems,k,key[k],exec,fn,value);}return elems;}if(value!==undefined){exec=!pass&&exec&&jQuery.isFunction(value);for(var i=0;i<length;i++){fn(elems[i],key,exec?value.call(elems[i],i,fn(elems[i],key)):value,pass);}return elems;}return length?fn(elems[0],key):undefined;},now:function(){return(new Date()).getTime();},uaMatch:function(ua){ua=ua.toLowerCase();var match=rwebkit.exec(ua)||ropera.exec(ua)||rmsie.exec(ua)||ua.indexOf("compatible")<0&&rmozilla.exec(ua)||[];return{browser:match[1]||"",version:match[2]||"0"};},sub:function(){function jQuerySub(selector,context){return new jQuerySub.fn.init(selector,context);}jQuery.extend(true,jQuerySub,this);jQuerySub.superclass=this;jQuerySub.fn=jQuerySub.prototype=this();
+jQuerySub.fn.constructor=jQuerySub;jQuerySub.sub=this.sub;jQuerySub.fn.init=function init(selector,context){if(context&&context instanceof jQuery&&!(context instanceof jQuerySub)){context=jQuerySub(context);}return jQuery.fn.init.call(this,selector,context,rootjQuerySub);};jQuerySub.fn.init.prototype=jQuerySub.fn;var rootjQuerySub=jQuerySub(document);return jQuerySub;},browser:{}});jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(i,name){class2type["[object "+name+"]"]=name.toLowerCase();});browserMatch=jQuery.uaMatch(userAgent);if(browserMatch.browser){jQuery.browser[browserMatch.browser]=true;jQuery.browser.version=browserMatch.version;}if(jQuery.browser.webkit){jQuery.browser.safari=true;}if(rnotwhite.test("\xA0")){trimLeft=/^[\s\xA0]+/;trimRight=/[\s\xA0]+$/;}rootjQuery=jQuery(document);if(document.addEventListener){DOMContentLoaded=function(){document.removeEventListener("DOMContentLoaded",DOMContentLoaded,false);jQuery.ready();};}else if(
+document.attachEvent){DOMContentLoaded=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",DOMContentLoaded);jQuery.ready();}};}function doScrollCheck(){if(jQuery.isReady){return;}try{document.documentElement.doScroll("left");}catch(e){setTimeout(doScrollCheck,1);return;}jQuery.ready();}return jQuery;})();var flagsCache={};function createFlags(flags){var object=flagsCache[flags]={},i,length;flags=flags.split(/\s+/);for(i=0,length=flags.length;i<length;i++){object[flags[i]]=true;}return object;}jQuery.Callbacks=function(flags){flags=flags?(flagsCache[flags]||createFlags(flags)):{};var list=[],stack=[],memory,firing,firingStart,firingLength,firingIndex,add=function(args){var i,length,elem,type,actual;for(i=0,length=args.length;i<length;i++){elem=args[i];type=jQuery.type(elem);if(type==="array"){add(elem);}else if(type==="function"){if(!flags.unique||!self.has(elem)){list.push(elem);}}}},fire=function(context,args){args=args||[];memory=!flags.memory||
+[context,args];firing=true;firingIndex=firingStart||0;firingStart=0;firingLength=list.length;for(;list&&firingIndex<firingLength;firingIndex++){if(list[firingIndex].apply(context,args)===false&&flags.stopOnFalse){memory=true;break;}}firing=false;if(list){if(!flags.once){if(stack&&stack.length){memory=stack.shift();self.fireWith(memory[0],memory[1]);}}else if(memory===true){self.disable();}else{list=[];}}},self={add:function(){if(list){var length=list.length;add(arguments);if(firing){firingLength=list.length;}else if(memory&&memory!==true){firingStart=length;fire(memory[0],memory[1]);}}return this;},remove:function(){if(list){var args=arguments,argIndex=0,argLength=args.length;for(;argIndex<argLength;argIndex++){for(var i=0;i<list.length;i++){if(args[argIndex]===list[i]){if(firing){if(i<=firingLength){firingLength--;if(i<=firingIndex){firingIndex--;}}}list.splice(i--,1);if(flags.unique){break;}}}}}return this;},has:function(fn){if(list){var i=0,length=list.length;for(;i<length;i++){if(
+fn===list[i]){return true;}}}return false;},empty:function(){list=[];return this;},disable:function(){list=stack=memory=undefined;return this;},disabled:function(){return!list;},lock:function(){stack=undefined;if(!memory||memory===true){self.disable();}return this;},locked:function(){return!stack;},fireWith:function(context,args){if(stack){if(firing){if(!flags.once){stack.push([context,args]);}}else if(!(flags.once&&memory)){fire(context,args);}}return this;},fire:function(){self.fireWith(this,arguments);return this;},fired:function(){return!!memory;}};return self;};var sliceDeferred=[].slice;jQuery.extend({Deferred:function(func){var doneList=jQuery.Callbacks("once memory"),failList=jQuery.Callbacks("once memory"),progressList=jQuery.Callbacks("memory"),state="pending",lists={resolve:doneList,reject:failList,notify:progressList},promise={done:doneList.add,fail:failList.add,progress:progressList.add,state:function(){return state;},isResolved:doneList.fired,isRejected:failList.fired,
+then:function(doneCallbacks,failCallbacks,progressCallbacks){deferred.done(doneCallbacks).fail(failCallbacks).progress(progressCallbacks);return this;},always:function(){deferred.done.apply(deferred,arguments).fail.apply(deferred,arguments);return this;},pipe:function(fnDone,fnFail,fnProgress){return jQuery.Deferred(function(newDefer){jQuery.each({done:[fnDone,"resolve"],fail:[fnFail,"reject"],progress:[fnProgress,"notify"]},function(handler,data){var fn=data[0],action=data[1],returned;if(jQuery.isFunction(fn)){deferred[handler](function(){returned=fn.apply(this,arguments);if(returned&&jQuery.isFunction(returned.promise)){returned.promise().then(newDefer.resolve,newDefer.reject,newDefer.notify);}else{newDefer[action+"With"](this===deferred?newDefer:this,[returned]);}});}else{deferred[handler](newDefer[action]);}});}).promise();},promise:function(obj){if(obj==null){obj=promise;}else{for(var key in promise){obj[key]=promise[key];}}return obj;}},deferred=promise.promise({}),key;for(key in
+lists){deferred[key]=lists[key].fire;deferred[key+"With"]=lists[key].fireWith;}deferred.done(function(){state="resolved";},failList.disable,progressList.lock).fail(function(){state="rejected";},doneList.disable,progressList.lock);if(func){func.call(deferred,deferred);}return deferred;},when:function(firstParam){var args=sliceDeferred.call(arguments,0),i=0,length=args.length,pValues=new Array(length),count=length,pCount=length,deferred=length<=1&&firstParam&&jQuery.isFunction(firstParam.promise)?firstParam:jQuery.Deferred(),promise=deferred.promise();function resolveFunc(i){return function(value){args[i]=arguments.length>1?sliceDeferred.call(arguments,0):value;if(!(--count)){deferred.resolveWith(deferred,args);}};}function progressFunc(i){return function(value){pValues[i]=arguments.length>1?sliceDeferred.call(arguments,0):value;deferred.notifyWith(promise,pValues);};}if(length>1){for(;i<length;i++){if(args[i]&&args[i].promise&&jQuery.isFunction(args[i].promise)){args[i].promise().then(
+resolveFunc(i),deferred.reject,progressFunc(i));}else{--count;}}if(!count){deferred.resolveWith(deferred,args);}}else if(deferred!==firstParam){deferred.resolveWith(deferred,length?[firstParam]:[]);}return promise;}});jQuery.support=(function(){var support,all,a,select,opt,input,marginDiv,fragment,tds,events,eventName,i,isSupported,div=document.createElement("div"),documentElement=document.documentElement;div.setAttribute("className","t");div.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";all=div.getElementsByTagName("*");a=div.getElementsByTagName("a")[0];if(!all||!all.length||!a){return{};}select=document.createElement("select");opt=select.appendChild(document.createElement("option"));input=div.getElementsByTagName("input")[0];support={leadingWhitespace:(div.firstChild.nodeType===3),tbody:!div.getElementsByTagName("tbody").length,htmlSerialize:!!div.getElementsByTagName("link").length,style:/top/.test(a.
+getAttribute("style")),hrefNormalized:(a.getAttribute("href")==="/a"),opacity:/^0.55/.test(a.style.opacity),cssFloat:!!a.style.cssFloat,checkOn:(input.value==="on"),optSelected:opt.selected,getSetAttribute:div.className!=="t",enctype:!!document.createElement("form").enctype,html5Clone:document.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};input.checked=true;support.noCloneChecked=input.cloneNode(true).checked;select.disabled=true;support.optDisabled=!opt.disabled;try{delete div.test;}catch(e){support.deleteExpando=false;}if(!div.addEventListener&&div.attachEvent&&div.fireEvent){div.attachEvent("onclick",function(){support.noCloneEvent=false;});div.cloneNode(true).fireEvent("onclick");}input=document.createElement("input");input.value="t";input.setAttribute("type","radio");support.radioValue=input
+.value==="t";input.setAttribute("checked","checked");div.appendChild(input);fragment=document.createDocumentFragment();fragment.appendChild(div.lastChild);support.checkClone=fragment.cloneNode(true).cloneNode(true).lastChild.checked;support.appendChecked=input.checked;fragment.removeChild(input);fragment.appendChild(div);div.innerHTML="";if(window.getComputedStyle){marginDiv=document.createElement("div");marginDiv.style.width="0";marginDiv.style.marginRight="0";div.style.width="2px";div.appendChild(marginDiv);support.reliableMarginRight=(parseInt((window.getComputedStyle(marginDiv,null)||{marginRight:0}).marginRight,10)||0)===0;}if(div.attachEvent){for(i in{submit:1,change:1,focusin:1}){eventName="on"+i;isSupported=(eventName in div);if(!isSupported){div.setAttribute(eventName,"return;");isSupported=(typeof div[eventName]==="function");}support[i+"Bubbles"]=isSupported;}}fragment.removeChild(div);fragment=select=opt=marginDiv=div=input=null;jQuery(function(){var container,outer,inner,
+table,td,offsetSupport,conMarginTop,ptlm,vb,style,html,body=document.getElementsByTagName("body")[0];if(!body){return;}conMarginTop=1;ptlm="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";vb="visibility:hidden;border:0;";style="style='"+ptlm+"border:5px solid #000;padding:0;'";html="<div "+style+"><div></div></div>"+"<table "+style+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>";container=document.createElement("div");container.style.cssText=vb+"width:0;height:0;position:static;top:0;margin-top:"+conMarginTop+"px";body.insertBefore(container,body.firstChild);div=document.createElement("div");container.appendChild(div);div.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";tds=div.getElementsByTagName("td");isSupported=(tds[0].offsetHeight===0);tds[0].style.display="";tds[1].style.display="none";support.reliableHiddenOffsets=isSupported&&(tds[0].offsetHeight===0);div.innerHTML="";div.style.width=div.style.
+paddingLeft="1px";jQuery.boxModel=support.boxModel=div.offsetWidth===2;if(typeof div.style.zoom!=="undefined"){div.style.display="inline";div.style.zoom=1;support.inlineBlockNeedsLayout=(div.offsetWidth===2);div.style.display="";div.innerHTML="<div style='width:4px;'></div>";support.shrinkWrapBlocks=(div.offsetWidth!==2);}div.style.cssText=ptlm+vb;div.innerHTML=html;outer=div.firstChild;inner=outer.firstChild;td=outer.nextSibling.firstChild.firstChild;offsetSupport={doesNotAddBorder:(inner.offsetTop!==5),doesAddBorderForTableAndCells:(td.offsetTop===5)};inner.style.position="fixed";inner.style.top="20px";offsetSupport.fixedPosition=(inner.offsetTop===20||inner.offsetTop===15);inner.style.position=inner.style.top="";outer.style.overflow="hidden";outer.style.position="relative";offsetSupport.subtractsBorderForOverflowNotVisible=(inner.offsetTop===-5);offsetSupport.doesNotIncludeMarginInBodyOffset=(body.offsetTop!==conMarginTop);body.removeChild(container);div=container=null;jQuery.extend
+(support,offsetSupport);});return support;})();var rbrace=/^(?:\{.*\}|\[.*\])$/,rmultiDash=/([A-Z])/g;jQuery.extend({cache:{},uuid:0,expando:"jQuery"+(jQuery.fn.jquery+Math.random()).replace(/\D/g,""),noData:{"embed":true,"object":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000","applet":true},hasData:function(elem){elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando];return!!elem&&!isEmptyDataObject(elem);},data:function(elem,name,data,pvt){if(!jQuery.acceptData(elem)){return;}var privateCache,thisCache,ret,internalKey=jQuery.expando,getByName=typeof name==="string",isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey,isEvents=name==="events";if((!id||!cache[id]||(!isEvents&&!pvt&&!cache[id].data))&&getByName&&data===undefined){return;}if(!id){if(isNode){elem[internalKey]=id=++jQuery.uuid;}else{id=internalKey;}}if(!cache[id]){cache[id]={};if(!isNode){cache[id].toJSON=jQuery.noop;}}if(typeof name==="object"||
+typeof name==="function"){if(pvt){cache[id]=jQuery.extend(cache[id],name);}else{cache[id].data=jQuery.extend(cache[id].data,name);}}privateCache=thisCache=cache[id];if(!pvt){if(!thisCache.data){thisCache.data={};}thisCache=thisCache.data;}if(data!==undefined){thisCache[jQuery.camelCase(name)]=data;}if(isEvents&&!thisCache[name]){return privateCache.events;}if(getByName){ret=thisCache[name];if(ret==null){ret=thisCache[jQuery.camelCase(name)];}}else{ret=thisCache;}return ret;},removeData:function(elem,name,pvt){if(!jQuery.acceptData(elem)){return;}var thisCache,i,l,internalKey=jQuery.expando,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:internalKey;if(!cache[id]){return;}if(name){thisCache=pvt?cache[id]:cache[id].data;if(thisCache){if(!jQuery.isArray(name)){if(name in thisCache){name=[name];}else{name=jQuery.camelCase(name);if(name in thisCache){name=[name];}else{name=name.split(" ");}}}for(i=0,l=name.length;i<l;i++){delete thisCache[name[i]];}if(!(pvt?
+isEmptyDataObject:jQuery.isEmptyObject)(thisCache)){return;}}}if(!pvt){delete cache[id].data;if(!isEmptyDataObject(cache[id])){return;}}if(jQuery.support.deleteExpando||!cache.setInterval){delete cache[id];}else{cache[id]=null;}if(isNode){if(jQuery.support.deleteExpando){delete elem[internalKey];}else if(elem.removeAttribute){elem.removeAttribute(internalKey);}else{elem[internalKey]=null;}}},_data:function(elem,name,data){return jQuery.data(elem,name,data,true);},acceptData:function(elem){if(elem.nodeName){var match=jQuery.noData[elem.nodeName.toLowerCase()];if(match){return!(match===true||elem.getAttribute("classid")!==match);}}return true;}});jQuery.fn.extend({data:function(key,value){var parts,attr,name,data=null;if(typeof key==="undefined"){if(this.length){data=jQuery.data(this[0]);if(this[0].nodeType===1&&!jQuery._data(this[0],"parsedAttrs")){attr=this[0].attributes;for(var i=0,l=attr.length;i<l;i++){name=attr[i].name;if(name.indexOf("data-")===0){name=jQuery.camelCase(name.
+substring(5));dataAttr(this[0],name,data[name]);}}jQuery._data(this[0],"parsedAttrs",true);}}return data;}else if(typeof key==="object"){return this.each(function(){jQuery.data(this,key);});}parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length){data=jQuery.data(this[0],key);data=dataAttr(this[0],key,data);}return data===undefined&&parts[1]?this.data(parts[0]):data;}else{return this.each(function(){var self=jQuery(this),args=[parts[0],value];self.triggerHandler("setData"+parts[1]+"!",args);jQuery.data(this,key,value);self.triggerHandler("changeData"+parts[1]+"!",args);});}},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});}});function dataAttr(elem,key,data){if(data===undefined&&elem.nodeType===1){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=data==="true"?
+true:data==="false"?false:data==="null"?null:jQuery.isNumeric(data)?parseFloat(data):rbrace.test(data)?jQuery.parseJSON(data):data;}catch(e){}jQuery.data(elem,key,data);}else{data=undefined;}}return data;}function isEmptyDataObject(obj){for(var name in obj){if(name==="data"&&jQuery.isEmptyObject(obj[name])){continue;}if(name!=="toJSON"){return false;}}return true;}function handleQueueMarkDefer(elem,type,src){var deferDataKey=type+"defer",queueDataKey=type+"queue",markDataKey=type+"mark",defer=jQuery._data(elem,deferDataKey);if(defer&&(src==="queue"||!jQuery._data(elem,queueDataKey))&&(src==="mark"||!jQuery._data(elem,markDataKey))){setTimeout(function(){if(!jQuery._data(elem,queueDataKey)&&!jQuery._data(elem,markDataKey)){jQuery.removeData(elem,deferDataKey,true);defer.fire();}},0);}}jQuery.extend({_mark:function(elem,type){if(elem){type=(type||"fx")+"mark";jQuery._data(elem,type,(jQuery._data(elem,type)||0)+1);}},_unmark:function(force,elem,type){if(force!==true){type=elem;elem=force;
+force=false;}if(elem){type=type||"fx";var key=type+"mark",count=force?0:((jQuery._data(elem,key)||1)-1);if(count){jQuery._data(elem,key,count);}else{jQuery.removeData(elem,key,true);handleQueueMarkDefer(elem,type,"mark");}}},queue:function(elem,type,data){var q;if(elem){type=(type||"fx")+"queue";q=jQuery._data(elem,type);if(data){if(!q||jQuery.isArray(data)){q=jQuery._data(elem,type,jQuery.makeArray(data));}else{q.push(data);}}return q||[];}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),fn=queue.shift(),hooks={};if(fn==="inprogress"){fn=queue.shift();}if(fn){if(type==="fx"){queue.unshift("inprogress");}jQuery._data(elem,type+".run",hooks);fn.call(elem,function(){jQuery.dequeue(elem,type);},hooks);}if(!queue.length){jQuery.removeData(elem,type+"queue "+type+".run",true);handleQueueMarkDefer(elem,type,"queue");}}});jQuery.fn.extend({queue:function(type,data){if(typeof type!=="string"){data=type;type="fx";}if(data===undefined){return jQuery.queue(this[0],
+type);}return this.each(function(){var queue=jQuery.queue(this,type,data);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type);}});},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type);});},delay:function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(next,hooks){var timeout=setTimeout(next,time);hooks.stop=function(){clearTimeout(timeout);};});},clearQueue:function(type){return this.queue(type||"fx",[]);},promise:function(type,object){if(typeof type!=="string"){object=type;type=undefined;}type=type||"fx";var defer=jQuery.Deferred(),elements=this,i=elements.length,count=1,deferDataKey=type+"defer",queueDataKey=type+"queue",markDataKey=type+"mark",tmp;function resolve(){if(!(--count)){defer.resolveWith(elements,[elements]);}}while(i--){if((tmp=jQuery.data(elements[i],deferDataKey,undefined,true)||(jQuery.data(elements[i],queueDataKey,undefined,true)||jQuery.data(elements[i],markDataKey,
+undefined,true))&&jQuery.data(elements[i],deferDataKey,jQuery.Callbacks("once memory"),true))){count++;tmp.add(resolve);}}resolve();return defer.promise();}});var rclass=/[\n\t\r]/g,rspace=/\s+/,rreturn=/\r/g,rtype=/^(?:button|input)$/i,rfocusable=/^(?:button|input|object|select|textarea)$/i,rclickable=/^a(?:rea)?$/i,rboolean=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,getSetAttribute=jQuery.support.getSetAttribute,nodeHook,boolHook,fixSpecified;jQuery.fn.extend({attr:function(name,value){return jQuery.access(this,name,value,true,jQuery.attr);},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name);});},prop:function(name,value){return jQuery.access(this,name,value,true,jQuery.prop);},removeProp:function(name){name=jQuery.propFix[name]||name;return this.each(function(){try{this[name]=undefined;delete this[name];}catch(e){}});},addClass:function(value){var classNames,i,l,elem,
+setClass,c,cl;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,this.className));});}if(value&&typeof value==="string"){classNames=value.split(rspace);for(i=0,l=this.length;i<l;i++){elem=this[i];if(elem.nodeType===1){if(!elem.className&&classNames.length===1){elem.className=value;}else{setClass=" "+elem.className+" ";for(c=0,cl=classNames.length;c<cl;c++){if(!~setClass.indexOf(" "+classNames[c]+" ")){setClass+=classNames[c]+" ";}}elem.className=jQuery.trim(setClass);}}}}return this;},removeClass:function(value){var classNames,i,l,elem,className,c,cl;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,this.className));});}if((value&&typeof value==="string")||value===undefined){classNames=(value||"").split(rspace);for(i=0,l=this.length;i<l;i++){elem=this[i];if(elem.nodeType===1&&elem.className){if(value){className=(" "+elem.className+" ").replace(rclass," ");for(c=0,cl=classNames.length;c<cl;
+c++){className=className.replace(" "+classNames[c]+" "," ");}elem.className=jQuery.trim(className);}else{elem.className="";}}}}return this;},toggleClass:function(value,stateVal){var type=typeof value,isBool=typeof stateVal==="boolean";if(jQuery.isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,this.className,stateVal),stateVal);});}return this.each(function(){if(type==="string"){var className,i=0,self=jQuery(this),state=stateVal,classNames=value.split(rspace);while((className=classNames[i++])){state=isBool?state:!self.hasClass(className);self[state?"addClass":"removeClass"](className);}}else if(type==="undefined"||type==="boolean"){if(this.className){jQuery._data(this,"__className__",this.className);}this.className=this.className||value===false?"":jQuery._data(this,"__className__")||"";}});},hasClass:function(selector){var className=" "+selector+" ",i=0,l=this.length;for(;i<l;i++){if(this[i].nodeType===1&&(" "+this[i].className+" ").replace(
+rclass," ").indexOf(className)>-1){return true;}}return false;},val:function(value){var hooks,ret,isFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.nodeName.toLowerCase()]||jQuery.valHooks[elem.type];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret;}ret=elem.value;return typeof ret==="string"?ret.replace(rreturn,""):ret==null?"":ret;}return;}isFunction=jQuery.isFunction(value);return this.each(function(i){var self=jQuery(this),val;if(this.nodeType!==1){return;}if(isFunction){val=value.call(this,i,self.val());}else{val=value;}if(val==null){val="";}else if(typeof val==="number"){val+="";}else if(jQuery.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+"";});}hooks=jQuery.valHooks[this.nodeName.toLowerCase()]||jQuery.valHooks[this.type];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val;}});}});jQuery.extend({valHooks:{option:{get:function(elem){var val=elem.
+attributes.value;return!val||val.specified?elem.value:elem.text;}},select:{get:function(elem){var value,i,max,option,index=elem.selectedIndex,values=[],options=elem.options,one=elem.type==="select-one";if(index<0){return null;}i=one?index:0;max=one?index+1:options.length;for(;i<max;i++){option=options[i];if(option.selected&&(jQuery.support.optDisabled?!option.disabled:option.getAttribute("disabled")===null)&&(!option.parentNode.disabled||!jQuery.nodeName(option.parentNode,"optgroup"))){value=jQuery(option).val();if(one){return value;}values.push(value);}}if(one&&!values.length&&options.length){return jQuery(options[index]).val();}return values;},set:function(elem,value){var values=jQuery.makeArray(value);jQuery(elem).find("option").each(function(){this.selected=jQuery.inArray(jQuery(this).val(),values)>=0;});if(!values.length){elem.selectedIndex=-1;}return values;}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(elem,name,
+value,pass){var ret,hooks,notxml,nType=elem.nodeType;if(!elem||nType===3||nType===8||nType===2){return;}if(pass&&name in jQuery.attrFn){return jQuery(elem)[name](value);}if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value);}notxml=nType!==1||!jQuery.isXMLDoc(elem);if(notxml){name=name.toLowerCase();hooks=jQuery.attrHooks[name]||(rboolean.test(name)?boolHook:nodeHook);}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return;}else if(hooks&&"set"in hooks&&notxml&&(ret=hooks.set(elem,value,name))!==undefined){return ret;}else{elem.setAttribute(name,""+value);return value;}}else if(hooks&&"get"in hooks&&notxml&&(ret=hooks.get(elem,name))!==null){return ret;}else{ret=elem.getAttribute(name);return ret===null?undefined:ret;}},removeAttr:function(elem,value){var propName,attrNames,name,l,i=0;if(value&&elem.nodeType===1){attrNames=value.toLowerCase().split(rspace);l=attrNames.length;for(;i<l;i++){name=attrNames[i];if(name){propName=jQuery.propFix[
+name]||name;jQuery.attr(elem,name,"");elem.removeAttribute(getSetAttribute?name:propName);if(rboolean.test(name)&&propName in elem){elem[propName]=false;}}}}},attrHooks:{type:{set:function(elem,value){if(rtype.test(elem.nodeName)&&elem.parentNode){jQuery.error("type property can't be changed");}else if(!jQuery.support.radioValue&&value==="radio"&&jQuery.nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val;}return value;}}},value:{get:function(elem,name){if(nodeHook&&jQuery.nodeName(elem,"button")){return nodeHook.get(elem,name);}return name in elem?elem.value:null;},set:function(elem,value,name){if(nodeHook&&jQuery.nodeName(elem,"button")){return nodeHook.set(elem,value,name);}elem.value=value;}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",
+contenteditable:"contentEditable"},prop:function(elem,name,value){var ret,hooks,notxml,nType=elem.nodeType;if(!elem||nType===3||nType===8||nType===2){return;}notxml=nType!==1||!jQuery.isXMLDoc(elem);if(notxml){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name];}if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret;}else{return(elem[name]=value);}}else{if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret;}else{return elem[name];}}},propHooks:{tabIndex:{get:function(elem){var attributeNode=elem.getAttributeNode("tabindex");return attributeNode&&attributeNode.specified?parseInt(attributeNode.value,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:undefined;}}}});jQuery.attrHooks.tabindex=jQuery.propHooks.tabIndex;boolHook={get:function(elem,name){var attrNode,property=jQuery.prop(elem,name);return property===true||typeof property!=="boolean"&&(attrNode=elem.getAttributeNode(name))&&
+attrNode.nodeValue!==false?name.toLowerCase():undefined;},set:function(elem,value,name){var propName;if(value===false){jQuery.removeAttr(elem,name);}else{propName=jQuery.propFix[name]||name;if(propName in elem){elem[propName]=true;}elem.setAttribute(name,name.toLowerCase());}return name;}};if(!getSetAttribute){fixSpecified={name:true,id:true};nodeHook=jQuery.valHooks.button={get:function(elem,name){var ret;ret=elem.getAttributeNode(name);return ret&&(fixSpecified[name]?ret.nodeValue!=="":ret.specified)?ret.nodeValue:undefined;},set:function(elem,value,name){var ret=elem.getAttributeNode(name);if(!ret){ret=document.createAttribute(name);elem.setAttributeNode(ret);}return(ret.nodeValue=value+"");}};jQuery.attrHooks.tabindex.set=nodeHook.set;jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{set:function(elem,value){if(value===""){elem.setAttribute(name,"auto");return value;}}});});jQuery.attrHooks.contenteditable={get:nodeHook.get
+,set:function(elem,value,name){if(value===""){value="false";}nodeHook.set(elem,value,name);}};}if(!jQuery.support.hrefNormalized){jQuery.each(["href","src","width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{get:function(elem){var ret=elem.getAttribute(name,2);return ret===null?undefined:ret;}});});}if(!jQuery.support.style){jQuery.attrHooks.style={get:function(elem){return elem.style.cssText.toLowerCase()||undefined;},set:function(elem,value){return(elem.style.cssText=""+value);}};}if(!jQuery.support.optSelected){jQuery.propHooks.selected=jQuery.extend(jQuery.propHooks.selected,{get:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}return null;}});}if(!jQuery.support.enctype){jQuery.propFix.enctype="encoding";}if(!jQuery.support.checkOn){jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={get:function(elem){return elem.getAttribute("value")===null?
+"on":elem.value;}};});}jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]=jQuery.extend(jQuery.valHooks[this],{set:function(elem,value){if(jQuery.isArray(value)){return(elem.checked=jQuery.inArray(jQuery(elem).val(),value)>=0);}}});});var rformElems=/^(?:textarea|input|select)$/i,rtypenamespace=/^([^\.]*)?(?:\.(.+))?$/,rhoverHack=/\bhover(\.\S+)?\b/,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|contextmenu)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rquickIs=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,quickParse=function(selector){var quick=rquickIs.exec(selector);if(quick){quick[1]=(quick[1]||"").toLowerCase();quick[3]=quick[3]&&new RegExp("(?:^|\\s)"+quick[3]+"(?:\\s|$)");}return quick;},quickIs=function(elem,m){var attrs=elem.attributes||{};return((!m[1]||elem.nodeName.toLowerCase()===m[1])&&(!m[2]||(attrs.id||{}).value===m[2])&&(!m[3]||m[3].test((attrs["class"]||{}).value)));},hoverHack=function(events){return jQuery.event.special.hover?events:events.replace(
+rhoverHack,"mouseenter$1 mouseleave$1");};jQuery.event={add:function(elem,types,handler,data,selector){var elemData,eventHandle,events,t,tns,type,namespaces,handleObj,handleObjIn,quick,handlers,special;if(elem.nodeType===3||elem.nodeType===8||!types||!handler||!(elemData=jQuery._data(elem))){return;}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;}if(!handler.guid){handler.guid=jQuery.guid++;}events=elemData.events;if(!events){elemData.events=events={};}eventHandle=elemData.handle;if(!eventHandle){elemData.handle=eventHandle=function(e){return typeof jQuery!=="undefined"&&(!e||jQuery.event.triggered!==e.type)?jQuery.event.dispatch.apply(eventHandle.elem,arguments):undefined;};eventHandle.elem=elem;}types=jQuery.trim(hoverHack(types)).split(" ");for(t=0;t<types.length;t++){tns=rtypenamespace.exec(types[t])||[];type=tns[1];namespaces=(tns[2]||"").split(".").sort();special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;
+special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:tns[1],data:data,handler:handler,guid:handler.guid,selector:selector,quick:quickParse(selector),namespace:namespaces.join(".")},handleObjIn);handlers=events[type];if(!handlers){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle,false);}else if(elem.attachEvent){elem.attachEvent("on"+type,eventHandle);}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid;}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj);}else{handlers.push(handleObj);}jQuery.event.global[type]=true;}elem=null;},global:{},remove:function(elem,types,handler,selector,mappedTypes){var elemData=jQuery.hasData(elem)&&jQuery._data(elem),t,tns,type,origType,namespaces,origCount,j,events,special,handle,eventType,handleObj;if(
+!elemData||!(events=elemData.events)){return;}types=jQuery.trim(hoverHack(types||"")).split(" ");for(t=0;t<types.length;t++){tns=rtypenamespace.exec(types[t])||[];type=origType=tns[1];namespaces=tns[2];if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true);}continue;}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;eventType=events[type]||[];origCount=eventType.length;namespaces=namespaces?new RegExp("(^|\\.)"+namespaces.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(j=0;j<eventType.length;j++){handleObj=eventType[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!namespaces||namespaces.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){eventType.splice(j--,1);if(handleObj.selector){eventType.delegateCount--;}if(special.remove){special.remove.call(elem,handleObj);}}}if(eventType.length
+===0&&origCount!==eventType.length){if(!special.teardown||special.teardown.call(elem,namespaces)===false){jQuery.removeEvent(elem,type,elemData.handle);}delete events[type];}}if(jQuery.isEmptyObject(events)){handle=elemData.handle;if(handle){handle.elem=null;}jQuery.removeData(elem,["events","handle"],true);}},customEvent:{"getData":true,"setData":true,"changeData":true},trigger:function(event,data,elem,onlyHandlers){if(elem&&(elem.nodeType===3||elem.nodeType===8)){return;}var type=event.type||event,namespaces=[],cache,exclusive,i,cur,old,ontype,special,handle,eventPath,bubbleType;if(rfocusMorph.test(type+jQuery.event.triggered)){return;}if(type.indexOf("!")>=0){type=type.slice(0,-1);exclusive=true;}if(type.indexOf(".")>=0){namespaces=type.split(".");type=namespaces.shift();namespaces.sort();}if((!elem||jQuery.event.customEvent[type])&&!jQuery.event.global[type]){return;}event=typeof event==="object"?event[jQuery.expando]?event:new jQuery.Event(type,event):new jQuery.Event(type);event.
+type=type;event.isTrigger=true;event.exclusive=exclusive;event.namespace=namespaces.join(".");event.namespace_re=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;ontype=type.indexOf(":")<0?"on"+type:"";if(!elem){cache=jQuery.cache;for(i in cache){if(cache[i].events&&cache[i].events[type]){jQuery.event.trigger(event,data,cache[i].handle.elem,true);}}return;}event.result=undefined;if(!event.target){event.target=elem;}data=data!=null?jQuery.makeArray(data):[];data.unshift(event);special=jQuery.event.special[type]||{};if(special.trigger&&special.trigger.apply(elem,data)===false){return;}eventPath=[[elem,special.bindType||type]];if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){bubbleType=special.delegateType||type;cur=rfocusMorph.test(bubbleType+type)?elem:elem.parentNode;old=null;for(;cur;cur=cur.parentNode){eventPath.push([cur,bubbleType]);old=cur;}if(old&&old===elem.ownerDocument){eventPath.push([old.defaultView||old.parentWindow||window,
+bubbleType]);}}for(i=0;i<eventPath.length&&!event.isPropagationStopped();i++){cur=eventPath[i][0];event.type=eventPath[i][1];handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle");if(handle){handle.apply(cur,data);}handle=ontype&&cur[ontype];if(handle&&jQuery.acceptData(cur)&&handle.apply(cur,data)===false){event.preventDefault();}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(elem.ownerDocument,data)===false)&&!(type==="click"&&jQuery.nodeName(elem,"a"))&&jQuery.acceptData(elem)){if(ontype&&elem[type]&&((type!=="focus"&&type!=="blur")||event.target.offsetWidth!==0)&&!jQuery.isWindow(elem)){old=elem[ontype];if(old){elem[ontype]=null;}jQuery.event.triggered=type;elem[type]();jQuery.event.triggered=undefined;if(old){elem[ontype]=old;}}}}return event.result;},dispatch:function(event){event=jQuery.event.fix(event||window.event);var handlers=((jQuery._data(this,"events")||{})[event.type]||[]),
+delegateCount=handlers.delegateCount,args=[].slice.call(arguments,0),run_all=!event.exclusive&&!event.namespace,handlerQueue=[],i,j,cur,jqcur,ret,selMatch,matched,matches,handleObj,sel,related;args[0]=event;event.delegateTarget=this;if(delegateCount&&!event.target.disabled&&!(event.button&&event.type==="click")){jqcur=jQuery(this);jqcur.context=this.ownerDocument||this;for(cur=event.target;cur!=this;cur=cur.parentNode||this){selMatch={};matches=[];jqcur[0]=cur;for(i=0;i<delegateCount;i++){handleObj=handlers[i];sel=handleObj.selector;if(selMatch[sel]===undefined){selMatch[sel]=(handleObj.quick?quickIs(cur,handleObj.quick):jqcur.is(sel));}if(selMatch[sel]){matches.push(handleObj);}}if(matches.length){handlerQueue.push({elem:cur,matches:matches});}}}if(handlers.length>delegateCount){handlerQueue.push({elem:this,matches:handlers.slice(delegateCount)});}for(i=0;i<handlerQueue.length&&!event.isPropagationStopped();i++){matched=handlerQueue[i];event.currentTarget=matched.elem;for(j=0;j<
+matched.matches.length&&!event.isImmediatePropagationStopped();j++){handleObj=matched.matches[j];if(run_all||(!event.namespace&&!handleObj.namespace)||event.namespace_re&&event.namespace_re.test(handleObj.namespace)){event.data=handleObj.data;event.handleObj=handleObj;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){event.result=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}}}return event.result;},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(event,original){if(event.which==null){event.which=original.charCode!=null?original.charCode:original.keyCode;}return event;}},mouseHooks:{props:
+"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(event,original){var eventDoc,doc,body,button=original.button,fromElement=original.fromElement;if(event.pageX==null&&original.clientX!=null){eventDoc=event.target.ownerDocument||document;doc=eventDoc.documentElement;body=eventDoc.body;event.pageX=original.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0);event.pageY=original.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0);}if(!event.relatedTarget&&fromElement){event.relatedTarget=fromElement===event.target?original.toElement:fromElement;}if(!event.which&&button!==undefined){event.which=(button&1?1:(button&2?3:(button&4?2:0)));}return event;}},fix:function(event){if(event[jQuery.expando]){return event;}var i,prop,originalEvent=event,fixHook=jQuery.event.fixHooks[event.type]||{},copy=fixHook.props?this.props.
+concat(fixHook.props):this.props;event=jQuery.Event(originalEvent);for(i=copy.length;i;){prop=copy[--i];event[prop]=originalEvent[prop];}if(!event.target){event.target=originalEvent.srcElement||document;}if(event.target.nodeType===3){event.target=event.target.parentNode;}if(event.metaKey===undefined){event.metaKey=event.ctrlKey;}return fixHook.filter?fixHook.filter(event,originalEvent):event;},special:{ready:{setup:jQuery.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(data,namespaces,eventHandle){if(jQuery.isWindow(this)){this.onbeforeunload=eventHandle;}},teardown:function(namespaces,eventHandle){if(this.onbeforeunload===eventHandle){this.onbeforeunload=null;}}}},simulate:function(type,elem,event,bubble){var e=jQuery.extend(new jQuery.Event(),event,{type:type,isSimulated:true,originalEvent:{}});if(bubble){jQuery.event.trigger(e,null,elem);}else{jQuery.event.dispatch.call(elem,e);}if(e.isDefaultPrevented()){
+event.preventDefault();}}};jQuery.event.handle=jQuery.event.dispatch;jQuery.removeEvent=document.removeEventListener?function(elem,type,handle){if(elem.removeEventListener){elem.removeEventListener(type,handle,false);}}:function(elem,type,handle){if(elem.detachEvent){elem.detachEvent("on"+type,handle);}};jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props);}if(src&&src.type){this.originalEvent=src;this.type=src.type;this.isDefaultPrevented=(src.defaultPrevented||src.returnValue===false||src.getPreventDefault&&src.getPreventDefault())?returnTrue:returnFalse;}else{this.type=src;}if(props){jQuery.extend(this,props);}this.timeStamp=src&&src.timeStamp||jQuery.now();this[jQuery.expando]=true;};function returnFalse(){return false;}function returnTrue(){return true;}jQuery.Event.prototype={preventDefault:function(){this.isDefaultPrevented=returnTrue;var e=this.originalEvent;if(!e){return;}if(e.preventDefault){e.preventDefault();}else{e.
+returnValue=false;}},stopPropagation:function(){this.isPropagationStopped=returnTrue;var e=this.originalEvent;if(!e){return;}if(e.stopPropagation){e.stopPropagation();}e.cancelBubble=true;},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=returnTrue;this.stopPropagation();},isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse};jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var target=this,related=event.relatedTarget,handleObj=event.handleObj,selector=handleObj.selector,ret;if(!related||(related!==target&&!jQuery.contains(target,related))){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);event.type=fix;}return ret;}};});if(!jQuery.support.submitBubbles){jQuery.event.special.submit={setup:function(){if(jQuery.nodeName(this,"form")){return false;}jQuery.event.add(this,
+"click._submit keypress._submit",function(e){var elem=e.target,form=jQuery.nodeName(elem,"input")||jQuery.nodeName(elem,"button")?elem.form:undefined;if(form&&!form._submit_attached){jQuery.event.add(form,"submit._submit",function(event){if(this.parentNode&&!event.isTrigger){jQuery.event.simulate("submit",this.parentNode,event,true);}});form._submit_attached=true;}});},teardown:function(){if(jQuery.nodeName(this,"form")){return false;}jQuery.event.remove(this,"._submit");}};}if(!jQuery.support.changeBubbles){jQuery.event.special.change={setup:function(){if(rformElems.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){jQuery.event.add(this,"propertychange._change",function(event){if(event.originalEvent.propertyName==="checked"){this._just_changed=true;}});jQuery.event.add(this,"click._change",function(event){if(this._just_changed&&!event.isTrigger){this._just_changed=false;jQuery.event.simulate("change",this,event,true);}});}return false;}jQuery.event.add(this,
+"beforeactivate._change",function(e){var elem=e.target;if(rformElems.test(elem.nodeName)&&!elem._change_attached){jQuery.event.add(elem,"change._change",function(event){if(this.parentNode&&!event.isSimulated&&!event.isTrigger){jQuery.event.simulate("change",this.parentNode,event,true);}});elem._change_attached=true;}});},handle:function(event){var elem=event.target;if(this!==elem||event.isSimulated||event.isTrigger||(elem.type!=="radio"&&elem.type!=="checkbox")){return event.handleObj.handler.apply(this,arguments);}},teardown:function(){jQuery.event.remove(this,"._change");return rformElems.test(this.nodeName);}};}if(!jQuery.support.focusinBubbles){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var attaches=0,handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event),true);};jQuery.event.special[fix]={setup:function(){if(attaches++===0){document.addEventListener(orig,handler,true);}},teardown:function(){if(--attaches===0){document.
+removeEventListener(orig,handler,true);}}};});}jQuery.fn.extend({on:function(types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=selector;selector=undefined;}for(type in types){this.on(type,selector,data,types[type],one);}return this;}if(data==null&&fn==null){fn=selector;data=selector=undefined;}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined;}else{fn=data;data=selector;selector=undefined;}}if(fn===false){fn=returnFalse;}else if(!fn){return this;}if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments);};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++);}return this.each(function(){jQuery.event.add(this,types,fn,data,selector);});},one:function(types,selector,data,fn){return this.on.call(this,types,selector,data,fn,1);},off:function(types,selector,fn){if(types&&types.preventDefault&&types.handleObj){var handleObj=types.handleObj;jQuery(types.delegateTarget).off(
+handleObj.namespace?handleObj.type+"."+handleObj.namespace:handleObj.type,handleObj.selector,handleObj.handler);return this;}if(typeof types==="object"){for(var type in types){this.off(type,selector,types[type]);}return this;}if(selector===false||typeof selector==="function"){fn=selector;selector=undefined;}if(fn===false){fn=returnFalse;}return this.each(function(){jQuery.event.remove(this,types,fn,selector);});},bind:function(types,data,fn){return this.on(types,null,data,fn);},unbind:function(types,fn){return this.off(types,null,fn);},live:function(types,data,fn){jQuery(this.context).on(types,this.selector,data,fn);return this;},die:function(types,fn){jQuery(this.context).off(types,this.selector||"**",fn);return this;},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn);},undelegate:function(selector,types,fn){return arguments.length==1?this.off(selector,"**"):this.off(types,selector,fn);},trigger:function(type,data){return this.each(function(){jQuery.
+event.trigger(type,data,this);});},triggerHandler:function(type,data){if(this[0]){return jQuery.event.trigger(type,data,this[0],true);}},toggle:function(fn){var args=arguments,guid=fn.guid||jQuery.guid++,i=0,toggler=function(event){var lastToggle=(jQuery._data(this,"lastToggle"+fn.guid)||0)%i;jQuery._data(this,"lastToggle"+fn.guid,lastToggle+1);event.preventDefault();return args[lastToggle].apply(this,arguments)||false;};toggler.guid=guid;while(i<args.length){args[i++].guid=guid;}return this.click(toggler);},hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver);}});jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error contextmenu").split(" "),function(i,name){jQuery.fn[name]=function(data,fn){if(fn==null){fn=data;data=null;}return arguments.length>0?this.on(name,null,data,fn):this.trigger(name);};if(
+jQuery.attrFn){jQuery.attrFn[name]=true;}if(rkeyEvent.test(name)){jQuery.event.fixHooks[name]=jQuery.event.keyHooks;}if(rmouseEvent.test(name)){jQuery.event.fixHooks[name]=jQuery.event.mouseHooks;}});(function(){var chunker=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,expando="sizcache"+(Math.random()+'').replace('.',''),done=0,toString=Object.prototype.toString,hasDuplicate=false,baseHasDuplicate=true,rBackslash=/\\/g,rReturn=/\r\n/g,rNonWord=/\W/;[0,0].sort(function(){baseHasDuplicate=false;return 0;});var Sizzle=function(selector,context,results,seed){results=results||[];context=context||document;var origContext=context;if(context.nodeType!==1&&context.nodeType!==9){return[];}if(!selector||typeof selector!=="string"){return results;}var m,set,checkSet,extra,ret,cur,pop,i,prune=true,contextXML=Sizzle.isXML(context),parts=[],soFar=selector;do{chunker.exec("");m=chunker.exec(soFar);if(m){soFar=m[3]
+;parts.push(m[1]);if(m[2]){extra=m[3];break;}}}while(m);if(parts.length>1&&origPOS.exec(selector)){if(parts.length===2&&Expr.relative[parts[0]]){set=posProcess(parts[0]+parts[1],context,seed);}else{set=Expr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context);while(parts.length){selector=parts.shift();if(Expr.relative[selector]){selector+=parts.shift();}set=posProcess(selector,set,seed);}}}else{if(!seed&&parts.length>1&&context.nodeType===9&&!contextXML&&Expr.match.ID.test(parts[0])&&!Expr.match.ID.test(parts[parts.length-1])){ret=Sizzle.find(parts.shift(),context,contextXML);context=ret.expr?Sizzle.filter(ret.expr,ret.set)[0]:ret.set[0];}if(context){ret=seed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop(),parts.length===1&&(parts[0]==="~"||parts[0]==="+")&&context.parentNode?context.parentNode:context,contextXML);set=ret.expr?Sizzle.filter(ret.expr,ret.set):ret.set;if(parts.length>0){checkSet=makeArray(set);}else{prune=false;}while(parts.length){cur=parts.pop();
+pop=cur;if(!Expr.relative[cur]){cur="";}else{pop=parts.pop();}if(pop==null){pop=context;}Expr.relative[cur](checkSet,pop,contextXML);}}else{checkSet=parts=[];}}if(!checkSet){checkSet=set;}if(!checkSet){Sizzle.error(cur||selector);}if(toString.call(checkSet)==="[object Array]"){if(!prune){results.push.apply(results,checkSet);}else if(context&&context.nodeType===1){for(i=0;checkSet[i]!=null;i++){if(checkSet[i]&&(checkSet[i]===true||checkSet[i].nodeType===1&&Sizzle.contains(context,checkSet[i]))){results.push(set[i]);}}}else{for(i=0;checkSet[i]!=null;i++){if(checkSet[i]&&checkSet[i].nodeType===1){results.push(set[i]);}}}}else{makeArray(checkSet,results);}if(extra){Sizzle(extra,origContext,results,seed);Sizzle.uniqueSort(results);}return results;};Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate=baseHasDuplicate;results.sort(sortOrder);if(hasDuplicate){for(var i=1;i<results.length;i++){if(results[i]===results[i-1]){results.splice(i--,1);}}}}return results;};Sizzle.matches=
+function(expr,set){return Sizzle(expr,null,null,set);};Sizzle.matchesSelector=function(node,expr){return Sizzle(expr,null,null,[node]).length>0;};Sizzle.find=function(expr,context,isXML){var set,i,len,match,type,left;if(!expr){return[];}for(i=0,len=Expr.order.length;i<len;i++){type=Expr.order[i];if((match=Expr.leftMatch[type].exec(expr))){left=match[1];match.splice(1,1);if(left.substr(left.length-1)!=="\\"){match[1]=(match[1]||"").replace(rBackslash,"");set=Expr.find[type](match,context,isXML);if(set!=null){expr=expr.replace(Expr.match[type],"");break;}}}}if(!set){set=typeof context.getElementsByTagName!=="undefined"?context.getElementsByTagName("*"):[];}return{set:set,expr:expr};};Sizzle.filter=function(expr,set,inplace,not){var match,anyFound,type,found,item,filter,left,i,pass,old=expr,result=[],curLoop=set,isXMLFilter=set&&set[0]&&Sizzle.isXML(set[0]);while(expr&&set.length){for(type in Expr.filter){if((match=Expr.leftMatch[type].exec(expr))!=null&&match[2]){filter=Expr.filter[type]
+;left=match[1];anyFound=false;match.splice(1,1);if(left.substr(left.length-1)==="\\"){continue;}if(curLoop===result){result=[];}if(Expr.preFilter[type]){match=Expr.preFilter[type](match,curLoop,inplace,result,not,isXMLFilter);if(!match){anyFound=found=true;}else if(match===true){continue;}}if(match){for(i=0;(item=curLoop[i])!=null;i++){if(item){found=filter(item,match,i,curLoop);pass=not^found;if(inplace&&found!=null){if(pass){anyFound=true;}else{curLoop[i]=false;}}else if(pass){result.push(item);anyFound=true;}}}}if(found!==undefined){if(!inplace){curLoop=result;}expr=expr.replace(Expr.match[type],"");if(!anyFound){return[];}break;}}}if(expr===old){if(anyFound==null){Sizzle.error(expr);}else{break;}}old=expr;}return curLoop;};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg);};var getText=Sizzle.getText=function(elem){var i,node,nodeType=elem.nodeType,ret="";if(nodeType){if(nodeType===1||nodeType===9){if(typeof elem.textContent==='string'){
+return elem.textContent;}else if(typeof elem.innerText==='string'){return elem.innerText.replace(rReturn,'');}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem);}}}else if(nodeType===3||nodeType===4){return elem.nodeValue;}}else{for(i=0;(node=elem[i]);i++){if(node.nodeType!==8){ret+=getText(node);}}}return ret;};var Expr=Sizzle.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className",
+"for":"htmlFor"},attrHandle:{href:function(elem){return elem.getAttribute("href");},type:function(elem){return elem.getAttribute("type");}},relative:{"+":function(checkSet,part){var isPartStr=typeof part==="string",isTag=isPartStr&&!rNonWord.test(part),isPartStrNotTag=isPartStr&&!isTag;if(isTag){part=part.toLowerCase();}for(var i=0,l=checkSet.length,elem;i<l;i++){if((elem=checkSet[i])){while((elem=elem.previousSibling)&&elem.nodeType!==1){}checkSet[i]=isPartStrNotTag||elem&&elem.nodeName.toLowerCase()===part?elem||false:elem===part;}}if(isPartStrNotTag){Sizzle.filter(part,checkSet,true);}},">":function(checkSet,part){var elem,isPartStr=typeof part==="string",i=0,l=checkSet.length;if(isPartStr&&!rNonWord.test(part)){part=part.toLowerCase();for(;i<l;i++){elem=checkSet[i];if(elem){var parent=elem.parentNode;checkSet[i]=parent.nodeName.toLowerCase()===part?parent:false;}}}else{for(;i<l;i++){elem=checkSet[i];if(elem){checkSet[i]=isPartStr?elem.parentNode:elem.parentNode===part;}}if(
+isPartStr){Sizzle.filter(part,checkSet,true);}}},"":function(checkSet,part,isXML){var nodeCheck,doneName=done++,checkFn=dirCheck;if(typeof part==="string"&&!rNonWord.test(part)){part=part.toLowerCase();nodeCheck=part;checkFn=dirNodeCheck;}checkFn("parentNode",part,doneName,checkSet,nodeCheck,isXML);},"~":function(checkSet,part,isXML){var nodeCheck,doneName=done++,checkFn=dirCheck;if(typeof part==="string"&&!rNonWord.test(part)){part=part.toLowerCase();nodeCheck=part;checkFn=dirNodeCheck;}checkFn("previousSibling",part,doneName,checkSet,nodeCheck,isXML);}},find:{ID:function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m&&m.parentNode?[m]:[];}},NAME:function(match,context){if(typeof context.getElementsByName!=="undefined"){var ret=[],results=context.getElementsByName(match[1]);for(var i=0,l=results.length;i<l;i++){if(results[i].getAttribute("name")===match[1]){ret.push(results[i]);}}return ret.length===0?null:
+ret;}},TAG:function(match,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(match[1]);}}},preFilter:{CLASS:function(match,curLoop,inplace,result,not,isXML){match=" "+match[1].replace(rBackslash,"")+" ";if(isXML){return match;}for(var i=0,elem;(elem=curLoop[i])!=null;i++){if(elem){if(not^(elem.className&&(" "+elem.className+" ").replace(/[\t\n\r]/g," ").indexOf(match)>=0)){if(!inplace){result.push(elem);}}else if(inplace){curLoop[i]=false;}}}return false;},ID:function(match){return match[1].replace(rBackslash,"");},TAG:function(match,curLoop){return match[1].replace(rBackslash,"").toLowerCase();},CHILD:function(match){if(match[1]==="nth"){if(!match[2]){Sizzle.error(match[0]);}match[2]=match[2].replace(/^\+|\s*/g,'');var test=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(match[2]==="even"&&"2n"||match[2]==="odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);match[2]=(test[1]+(test[2]||1))-0;match[3]=test[3]-0;}else if(match[2]){Sizzle.error
+(match[0]);}match[0]=done++;return match;},ATTR:function(match,curLoop,inplace,result,not,isXML){var name=match[1]=match[1].replace(rBackslash,"");if(!isXML&&Expr.attrMap[name]){match[1]=Expr.attrMap[name];}match[4]=(match[4]||match[5]||"").replace(rBackslash,"");if(match[2]==="~="){match[4]=" "+match[4]+" ";}return match;},PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]==="not"){if((chunker.exec(match[3])||"").length>1||/^\w/.test(match[3])){match[3]=Sizzle(match[3],null,null,curLoop);}else{var ret=Sizzle.filter(match[3],curLoop,inplace,true^not);if(!inplace){result.push.apply(result,ret);}return false;}}else if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return true;}return match;},POS:function(match){match.unshift(true);return match;}},filters:{enabled:function(elem){return elem.disabled===false&&elem.type!=="hidden";},disabled:function(elem){return elem.disabled===true;},checked:function(elem){return elem.checked===true;},selected:function(elem){if
+(elem.parentNode){elem.parentNode.selectedIndex;}return elem.selected===true;},parent:function(elem){return!!elem.firstChild;},empty:function(elem){return!elem.firstChild;},has:function(elem,i,match){return!!Sizzle(match[3],elem).length;},header:function(elem){return(/h\d/i).test(elem.nodeName);},text:function(elem){var attr=elem.getAttribute("type"),type=elem.type;return elem.nodeName.toLowerCase()==="input"&&"text"===type&&(attr===type||attr===null);},radio:function(elem){return elem.nodeName.toLowerCase()==="input"&&"radio"===elem.type;},checkbox:function(elem){return elem.nodeName.toLowerCase()==="input"&&"checkbox"===elem.type;},file:function(elem){return elem.nodeName.toLowerCase()==="input"&&"file"===elem.type;},password:function(elem){return elem.nodeName.toLowerCase()==="input"&&"password"===elem.type;},submit:function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&"submit"===elem.type;},image:function(elem){return elem.nodeName.toLowerCase
+()==="input"&&"image"===elem.type;},reset:function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&"reset"===elem.type;},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&"button"===elem.type||name==="button";},input:function(elem){return(/input|select|textarea|button/i).test(elem.nodeName);},focus:function(elem){return elem===elem.ownerDocument.activeElement;}},setFilters:{first:function(elem,i){return i===0;},last:function(elem,i,match,array){return i===array.length-1;},even:function(elem,i){return i%2===0;},odd:function(elem,i){return i%2===1;},lt:function(elem,i,match){return i<match[3]-0;},gt:function(elem,i,match){return i>match[3]-0;},nth:function(elem,i,match){return match[3]-0===i;},eq:function(elem,i,match){return match[3]-0===i;}},filter:{PSEUDO:function(elem,match,i,array){var name=match[1],filter=Expr.filters[name];if(filter){return filter(elem,i,match,array);}else if(name==="contains"){return(elem.
+textContent||elem.innerText||getText([elem])||"").indexOf(match[3])>=0;}else if(name==="not"){var not=match[3];for(var j=0,l=not.length;j<l;j++){if(not[j]===elem){return false;}}return true;}else{Sizzle.error(name);}},CHILD:function(elem,match){var first,last,doneName,parent,cache,count,diff,type=match[1],node=elem;switch(type){case"only":case"first":while((node=node.previousSibling)){if(node.nodeType===1){return false;}}if(type==="first"){return true;}node=elem;case"last":while((node=node.nextSibling)){if(node.nodeType===1){return false;}}return true;case"nth":first=match[2];last=match[3];if(first===1&&last===0){return true;}doneName=match[0];parent=elem.parentNode;if(parent&&(parent[expando]!==doneName||!elem.nodeIndex)){count=0;for(node=parent.firstChild;node;node=node.nextSibling){if(node.nodeType===1){node.nodeIndex=++count;}}parent[expando]=doneName;}diff=elem.nodeIndex-last;if(first===0){return diff===0;}else{return(diff%first===0&&diff/first>=0);}}},ID:function(elem,match){
+return elem.nodeType===1&&elem.getAttribute("id")===match;},TAG:function(elem,match){return(match==="*"&&elem.nodeType===1)||!!elem.nodeName&&elem.nodeName.toLowerCase()===match;},CLASS:function(elem,match){return(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)>-1;},ATTR:function(elem,match){var name=match[1],result=Sizzle.attr?Sizzle.attr(elem,name):Expr.attrHandle[name]?Expr.attrHandle[name](elem):elem[name]!=null?elem[name]:elem.getAttribute(name),value=result+"",type=match[2],check=match[4];return result==null?type==="!=":!type&&Sizzle.attr?result!=null:type==="="?value===check:type==="*="?value.indexOf(check)>=0:type==="~="?(" "+value+" ").indexOf(check)>=0:!check?value&&result!==false:type==="!="?value!==check:type==="^="?value.indexOf(check)===0:type==="$="?value.substr(value.length-check.length)===check:type==="|="?value===check||value.substr(0,check.length+1)===check+"-":false;},POS:function(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name
+];if(filter){return filter(elem,i,match,array);}}}};var origPOS=Expr.match.POS,fescape=function(all,num){return"\\"+(num-0+1);};for(var type in Expr.match){Expr.match[type]=new RegExp(Expr.match[type].source+(/(?![^\[]*\])(?![^\(]*\))/.source));Expr.leftMatch[type]=new RegExp(/(^(?:.|\r|\n)*?)/.source+Expr.match[type].source.replace(/\\(\d+)/g,fescape));}var makeArray=function(array,results){array=Array.prototype.slice.call(array,0);if(results){results.push.apply(results,array);return results;}return array;};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType;}catch(e){makeArray=function(array,results){var i=0,ret=results||[];if(toString.call(array)==="[object Array]"){Array.prototype.push.apply(ret,array);}else{if(typeof array.length==="number"){for(var l=array.length;i<l;i++){ret.push(array[i]);}}else{for(;array[i];i++){ret.push(array[i]);}}}return ret;};}var sortOrder,siblingCheck;if(document.documentElement.compareDocumentPosition){sortOrder=function(a
+,b){if(a===b){hasDuplicate=true;return 0;}if(!a.compareDocumentPosition||!b.compareDocumentPosition){return a.compareDocumentPosition?-1:1;}return a.compareDocumentPosition(b)&4?-1:1;};}else{sortOrder=function(a,b){if(a===b){hasDuplicate=true;return 0;}else if(a.sourceIndex&&b.sourceIndex){return a.sourceIndex-b.sourceIndex;}var al,bl,ap=[],bp=[],aup=a.parentNode,bup=b.parentNode,cur=aup;if(aup===bup){return siblingCheck(a,b);}else if(!aup){return-1;}else if(!bup){return 1;}while(cur){ap.unshift(cur);cur=cur.parentNode;}cur=bup;while(cur){bp.unshift(cur);cur=cur.parentNode;}al=ap.length;bl=bp.length;for(var i=0;i<al&&i<bl;i++){if(ap[i]!==bp[i]){return siblingCheck(ap[i],bp[i]);}}return i===al?siblingCheck(a,bp[i],-1):siblingCheck(ap[i],b,1);};siblingCheck=function(a,b,ret){if(a===b){return ret;}var cur=a.nextSibling;while(cur){if(cur===b){return-1;}cur=cur.nextSibling;}return 1;};}(function(){var form=document.createElement("div"),id="script"+(new Date()).getTime(),root=document.
+documentElement;form.innerHTML="<a name='"+id+"'/>";root.insertBefore(form,root.firstChild);if(document.getElementById(id)){Expr.find.ID=function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?m.id===match[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===match[1]?[m]:undefined:[];}};Expr.filter.ID=function(elem,match){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return elem.nodeType===1&&node&&node.nodeValue===match;};}root.removeChild(form);root=form=null;})();(function(){var div=document.createElement("div");div.appendChild(document.createComment(""));if(div.getElementsByTagName("*").length>0){Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]);if(match[1]==="*"){var tmp=[];for(var i=0;results[i];i++){if(results[i].nodeType===1){tmp.push(results[i]);}}results=tmp;}return results;};}div.innerHTML=
+"<a href='#'></a>";if(div.firstChild&&typeof div.firstChild.getAttribute!=="undefined"&&div.firstChild.getAttribute("href")!=="#"){Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2);};}div=null;})();if(document.querySelectorAll){(function(){var oldSizzle=Sizzle,div=document.createElement("div"),id="__sizzle__";div.innerHTML="<p class='TEST'></p>";if(div.querySelectorAll&&div.querySelectorAll(".TEST").length===0){return;}Sizzle=function(query,context,extra,seed){context=context||document;if(!seed&&!Sizzle.isXML(context)){var match=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(query);if(match&&(context.nodeType===1||context.nodeType===9)){if(match[1]){return makeArray(context.getElementsByTagName(query),extra);}else if(match[2]&&Expr.find.CLASS&&context.getElementsByClassName){return makeArray(context.getElementsByClassName(match[2]),extra);}}if(context.nodeType===9){if(query==="body"&&context.body){return makeArray([context.body],extra);}else if(match&&match[3]){var elem
+=context.getElementById(match[3]);if(elem&&elem.parentNode){if(elem.id===match[3]){return makeArray([elem],extra);}}else{return makeArray([],extra);}}try{return makeArray(context.querySelectorAll(query),extra);}catch(qsaError){}}else if(context.nodeType===1&&context.nodeName.toLowerCase()!=="object"){var oldContext=context,old=context.getAttribute("id"),nid=old||id,hasParent=context.parentNode,relativeHierarchySelector=/^\s*[+~]/.test(query);if(!old){context.setAttribute("id",nid);}else{nid=nid.replace(/'/g,"\\$&");}if(relativeHierarchySelector&&hasParent){context=context.parentNode;}try{if(!relativeHierarchySelector||hasParent){return makeArray(context.querySelectorAll("[id='"+nid+"'] "+query),extra);}}catch(pseudoError){}finally{if(!old){oldContext.removeAttribute("id");}}}}return oldSizzle(query,context,extra,seed);};for(var prop in oldSizzle){Sizzle[prop]=oldSizzle[prop];}div=null;})();}(function(){var html=document.documentElement,matches=html.matchesSelector||html.
+mozMatchesSelector||html.webkitMatchesSelector||html.msMatchesSelector;if(matches){var disconnectedMatch=!matches.call(document.createElement("div"),"div"),pseudoWorks=false;try{matches.call(document.documentElement,"[test!='']:sizzle");}catch(pseudoError){pseudoWorks=true;}Sizzle.matchesSelector=function(node,expr){expr=expr.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!Sizzle.isXML(node)){try{if(pseudoWorks||!Expr.match.PSEUDO.test(expr)&&!/!=/.test(expr)){var ret=matches.call(node,expr);if(ret||!disconnectedMatch||node.document&&node.document.nodeType!==11){return ret;}}}catch(e){}}return Sizzle(expr,null,null,[node]).length>0;};}})();(function(){var div=document.createElement("div");div.innerHTML="<div class='test e'></div><div class='test'></div>";if(!div.getElementsByClassName||div.getElementsByClassName("e").length===0){return;}div.lastChild.className="e";if(div.getElementsByClassName("e").length===1){return;}Expr.order.splice(1,0,"CLASS");Expr.find.CLASS=function(match,context,
+isXML){if(typeof context.getElementsByClassName!=="undefined"&&!isXML){return context.getElementsByClassName(match[1]);}};div=null;})();function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){var match=false;elem=elem[dir];while(elem){if(elem[expando]===doneName){match=checkSet[elem.sizset];break;}if(elem.nodeType===1&&!isXML){elem[expando]=doneName;elem.sizset=i;}if(elem.nodeName.toLowerCase()===cur){match=elem;break;}elem=elem[dir];}checkSet[i]=match;}}}function dirCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){var match=false;elem=elem[dir];while(elem){if(elem[expando]===doneName){match=checkSet[elem.sizset];break;}if(elem.nodeType===1){if(!isXML){elem[expando]=doneName;elem.sizset=i;}if(typeof cur!=="string"){if(elem===cur){match=true;break;}}else if(Sizzle.filter(cur,[elem]).length>0){match=elem;break;}}elem=elem[dir];}checkSet[i]=
+match;}}}if(document.documentElement.contains){Sizzle.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):true);};}else if(document.documentElement.compareDocumentPosition){Sizzle.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16);};}else{Sizzle.contains=function(){return false;};}Sizzle.isXML=function(elem){var documentElement=(elem?elem.ownerDocument||elem:0).documentElement;return documentElement?documentElement.nodeName!=="HTML":false;};var posProcess=function(selector,context,seed){var match,tmpSet=[],later="",root=context.nodeType?[context]:context;while((match=Expr.match.PSEUDO.exec(selector))){later+=match[0];selector=selector.replace(Expr.match.PSEUDO,"");}selector=Expr.relative[selector]?selector+"*":selector;for(var i=0,l=root.length;i<l;i++){Sizzle(selector,root[i],tmpSet,seed);}return Sizzle.filter(later,tmpSet);};Sizzle.attr=jQuery.attr;Sizzle.selectors.attrMap={};jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.filters
+;jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;})();var runtil=/Until$/,rparentsprev=/^(?:parents|prevUntil|prevAll)/,rmultiselector=/,/,isSimple=/^.[^:#\[\.,]*$/,slice=Array.prototype.slice,POS=jQuery.expr.match.POS,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({find:function(selector){var self=this,i,l;if(typeof selector!=="string"){return jQuery(selector).filter(function(){for(i=0,l=self.length;i<l;i++){if(jQuery.contains(self[i],this)){return true;}}});}var ret=this.pushStack("","find",selector),length,n,r;for(i=0,l=this.length;i<l;i++){length=ret.length;jQuery.find(selector,this[i],ret);if(i>0){for(n=length;n<ret.length;n++){for(r=0;r<length;r++){if(ret[r]===ret[n]){ret.splice(n--,1);break;}}}}}return ret;},has:function(target){var targets=jQuery(target);return this.filter(function(){for(var i=0,l=targets.length;i<l;i++){if(jQuery.contains(this,targets[i])){return true;}
+}});},not:function(selector){return this.pushStack(winnow(this,selector,false),"not",selector);},filter:function(selector){return this.pushStack(winnow(this,selector,true),"filter",selector);},is:function(selector){return!!selector&&(typeof selector==="string"?POS.test(selector)?jQuery(selector,this.context).index(this[0])>=0:jQuery.filter(selector,this).length>0:this.filter(selector).length>0);},closest:function(selectors,context){var ret=[],i,l,cur=this[0];if(jQuery.isArray(selectors)){var level=1;while(cur&&cur.ownerDocument&&cur!==context){for(i=0;i<selectors.length;i++){if(jQuery(cur).is(selectors[i])){ret.push({selector:selectors[i],elem:cur,level:level});}}cur=cur.parentNode;level++;}return ret;}var pos=POS.test(selectors)||typeof selectors!=="string"?jQuery(selectors,context||this.context):0;for(i=0,l=this.length;i<l;i++){cur=this[i];while(cur){if(pos?pos.index(cur)>-1:jQuery.find.matchesSelector(cur,selectors)){ret.push(cur);break;}else{cur=cur.parentNode;if(!cur||!cur.
+ownerDocument||cur===context||cur.nodeType===11){break;}}}}ret=ret.length>1?jQuery.unique(ret):ret;return this.pushStack(ret,"closest",selectors);},index:function(elem){if(!elem){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1;}if(typeof elem==="string"){return jQuery.inArray(this[0],jQuery(elem));}return jQuery.inArray(elem.jquery?elem[0]:elem,this);},add:function(selector,context){var set=typeof selector==="string"?jQuery(selector,context):jQuery.makeArray(selector&&selector.nodeType?[selector]:selector),all=jQuery.merge(this.get(),set);return this.pushStack(isDisconnected(set[0])||isDisconnected(all[0])?all:jQuery.unique(all));},andSelf:function(){return this.add(this.prevObject);}});function isDisconnected(node){return!node||!node.parentNode||node.parentNode.nodeType===11;}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null;},parents:function(elem){return jQuery.dir(elem,"parentNode");},parentsUntil:function(
+elem,i,until){return jQuery.dir(elem,"parentNode",until);},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until);},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until);},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);if(!runtil.test(name)){selector=until;}if(selector&&typeof selector==="string"){ret=jQuery.filter(selector,ret);}ret=this.length>1&&!
+guaranteedUnique[name]?jQuery.unique(ret):ret;if((this.length>1||rmultiselector.test(selector))&&rparentsprev.test(name)){ret=ret.reverse();}return this.pushStack(ret,name,slice.call(arguments).join(","));};});jQuery.extend({filter:function(expr,elems,not){if(not){expr=":not("+expr+")";}return elems.length===1?jQuery.find.matchesSelector(elems[0],expr)?[elems[0]]:[]:jQuery.find.matches(expr,elems);},dir:function(elem,dir,until){var matched=[],cur=elem[dir];while(cur&&cur.nodeType!==9&&(until===undefined||cur.nodeType!==1||!jQuery(cur).is(until))){if(cur.nodeType===1){matched.push(cur);}cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir]){if(cur.nodeType===1&&++num===result){break;}}return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){r.push(n);}}return r;}});function winnow(elements,qualifier,keep){qualifier=qualifier||0;if(jQuery.isFunction(qualifier)){return jQuery.grep(
+elements,function(elem,i){var retVal=!!qualifier.call(elem,i,elem);return retVal===keep;});}else if(qualifier.nodeType){return jQuery.grep(elements,function(elem,i){return(elem===qualifier)===keep;});}else if(typeof qualifier==="string"){var filtered=jQuery.grep(elements,function(elem){return elem.nodeType===1;});if(isSimple.test(qualifier)){return jQuery.filter(qualifier,filtered,!keep);}else{qualifier=jQuery.filter(qualifier,filtered);}}return jQuery.grep(elements,function(elem,i){return(jQuery.inArray(elem,qualifier)>=0)===keep;});}function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement){while(list.length){safeFrag.createElement(list.pop());}}return safeFrag;}var nodeNames="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|"+"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",rinlinejQuery=/ jQuery\d+="(?:\d+|null)"/g,rleadingWhitespace=/^\s+/,rxhtmlTag=
+/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,rtagName=/<([\w:]+)/,rtbody=/<tbody/i,rhtml=/<|&#?\w+;/,rnoInnerhtml=/<(?:script|style)/i,rnocache=/<(?:script|object|embed|option|style)/i,rnoshimcache=new RegExp("<(?:"+nodeNames+")","i"),rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rscriptType=/\/(java|ecma)script/i,rcleanScript=/^\s*<!(?:\[CDATA\[|\-\-)/,wrapMap={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},safeFragment=createSafeFragment(document);wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;if(!jQuery.support.htmlSerialize){wrapMap._default=[1,"div<div>","</div>"];}jQuery.fn.extend({text:function
+(text){if(jQuery.isFunction(text)){return this.each(function(i){var self=jQuery(this);self.text(text.call(this,i,self.text()));});}if(typeof text!=="object"&&text!==undefined){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));}return jQuery.text(this);},wrapAll:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i));});}if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0]);}wrap.map(function(){var elem=this;while(elem.firstChild&&elem.firstChild.nodeType===1){elem=elem.firstChild;}return elem;}).append(this);}return this;},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i));});}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html);}else{self.append(html);}});},wrap:function(html){var
+isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html);});},unwrap:function(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes);}}).end();},append:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType===1){this.appendChild(elem);}});},prepend:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType===1){this.insertBefore(elem,this.firstChild);}});},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this);});}else if(arguments.length){var set=jQuery.clean(arguments);set.push.apply(set,this.toArray());return this.pushStack(set,"before",arguments);}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});}else if(arguments.length){var
+set=this.pushStack(this,"after",arguments);set.push.apply(set,jQuery.clean(arguments));return set;}},remove:function(selector,keepData){for(var i=0,elem;(elem=this[i])!=null;i++){if(!selector||jQuery.filter(selector,[elem]).length){if(!keepData&&elem.nodeType===1){jQuery.cleanData(elem.getElementsByTagName("*"));jQuery.cleanData([elem]);}if(elem.parentNode){elem.parentNode.removeChild(elem);}}}return this;},empty:function(){for(var i=0,elem;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(elem.getElementsByTagName("*"));}while(elem.firstChild){elem.removeChild(elem.firstChild);}}return this;},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents);});},html:function(value){if(value===undefined){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(
+rinlinejQuery,""):null;}else if(typeof value==="string"&&!rnoInnerhtml.test(value)&&(jQuery.support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,"<$1></$2>");try{for(var i=0,l=this.length;i<l;i++){if(this[i].nodeType===1){jQuery.cleanData(this[i].getElementsByTagName("*"));this[i].innerHTML=value;}}}catch(e){this.empty().append(value);}}else if(jQuery.isFunction(value)){this.each(function(i){var self=jQuery(this);self.html(value.call(this,i,self.html()));});}else{this.empty().append(value);}return this;},replaceWith:function(value){if(this[0]&&this[0].parentNode){if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this),old=self.html();self.replaceWith(value.call(this,i,old));});}if(typeof value!=="string"){value=jQuery(value).detach();}return this.each(function(){var next=this.nextSibling,parent=this.parentNode;jQuery(this).remove();if(next){jQuery(next).before(value
+);}else{jQuery(parent).append(value);}});}else{return this.length?this.pushStack(jQuery(jQuery.isFunction(value)?value():value),"replaceWith",value):this;}},detach:function(selector){return this.remove(selector,true);},domManip:function(args,table,callback){var results,first,fragment,parent,value=args[0],scripts=[];if(!jQuery.support.checkClone&&arguments.length===3&&typeof value==="string"&&rchecked.test(value)){return this.each(function(){jQuery(this).domManip(args,table,callback,true);});}if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this);args[0]=value.call(this,i,table?self.html():undefined);self.domManip(args,table,callback);});}if(this[0]){parent=value&&value.parentNode;if(jQuery.support.parentNode&&parent&&parent.nodeType===11&&parent.childNodes.length===this.length){results={fragment:parent};}else{results=jQuery.buildFragment(args,this,scripts);}fragment=results.fragment;if(fragment.childNodes.length===1){first=fragment=fragment.firstChild;}else{
+first=fragment.firstChild;}if(first){table=table&&jQuery.nodeName(first,"tr");for(var i=0,l=this.length,lastIndex=l-1;i<l;i++){callback.call(table?root(this[i],first):this[i],results.cacheable||(l>1&&i<lastIndex)?jQuery.clone(fragment,true,true):fragment);}}if(scripts.length){jQuery.each(scripts,evalScript);}}return this;}});function root(elem,cur){return jQuery.nodeName(elem,"table")?(elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody"))):elem;}function cloneCopyEvent(src,dest){if(dest.nodeType!==1||!jQuery.hasData(src)){return;}var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle;curData.events={};for(type in events){for(i=0,l=events[type].length;i<l;i++){jQuery.event.add(dest,type+(events[type][i].namespace?".":"")+events[type][i].namespace,events[type][i],events[type][i].data);}}}if(curData.data){curData.data=jQuery.extend({},curData.data);}}function
+cloneFixAttributes(src,dest){var nodeName;if(dest.nodeType!==1){return;}if(dest.clearAttributes){dest.clearAttributes();}if(dest.mergeAttributes){dest.mergeAttributes(src);}nodeName=dest.nodeName.toLowerCase();if(nodeName==="object"){dest.outerHTML=src.outerHTML;}else if(nodeName==="input"&&(src.type==="checkbox"||src.type==="radio")){if(src.checked){dest.defaultChecked=dest.checked=src.checked;}if(dest.value!==src.value){dest.value=src.value;}}else if(nodeName==="option"){dest.selected=src.defaultSelected;}else if(nodeName==="input"||nodeName==="textarea"){dest.defaultValue=src.defaultValue;}dest.removeAttribute(jQuery.expando);}jQuery.buildFragment=function(args,nodes,scripts){var fragment,cacheable,cacheresults,doc,first=args[0];if(nodes&&nodes[0]){doc=nodes[0].ownerDocument||nodes[0];}if(!doc.createDocumentFragment){doc=document;}if(args.length===1&&typeof first==="string"&&first.length<512&&doc===document&&first.charAt(0)==="<"&&!rnocache.test(first)&&(jQuery.support.checkClone||!
+rchecked.test(first))&&(jQuery.support.html5Clone||!rnoshimcache.test(first))){cacheable=true;cacheresults=jQuery.fragments[first];if(cacheresults&&cacheresults!==1){fragment=cacheresults;}}if(!fragment){fragment=doc.createDocumentFragment();jQuery.clean(args,doc,fragment,scripts);}if(cacheable){jQuery.fragments[first]=cacheresults?fragment:1;}return{fragment:fragment,cacheable:cacheable};};jQuery.fragments={};jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var ret=[],insert=jQuery(selector),parent=this.length===1&&this[0].parentNode;if(parent&&parent.nodeType===11&&parent.childNodes.length===1&&insert.length===1){insert[original](this[0]);return this;}else{for(var i=0,l=insert.length;i<l;i++){var elems=(i>0?this.clone(true):this).get();jQuery(insert[i])[original](elems);ret=ret.concat(elems);}return this.pushStack(ret,name,insert.selector);}};});function
+getAll(elem){if(typeof elem.getElementsByTagName!=="undefined"){return elem.getElementsByTagName("*");}else if(typeof elem.querySelectorAll!=="undefined"){return elem.querySelectorAll("*");}else{return[];}}function fixDefaultChecked(elem){if(elem.type==="checkbox"||elem.type==="radio"){elem.defaultChecked=elem.checked;}}function findInputs(elem){var nodeName=(elem.nodeName||"").toLowerCase();if(nodeName==="input"){fixDefaultChecked(elem);}else if(nodeName!=="script"&&typeof elem.getElementsByTagName!=="undefined"){jQuery.grep(elem.getElementsByTagName("input"),fixDefaultChecked);}}function shimCloneNode(elem){var div=document.createElement("div");safeFragment.appendChild(div);div.innerHTML=elem.outerHTML;return div.firstChild;}jQuery.extend({clone:function(elem,dataAndEvents,deepDataAndEvents){var srcElements,destElements,i,clone=jQuery.support.html5Clone||!rnoshimcache.test("<"+elem.nodeName)?elem.cloneNode(true):shimCloneNode(elem);if((!jQuery.support.noCloneEvent||!jQuery.support.
+noCloneChecked)&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){cloneFixAttributes(elem,clone);srcElements=getAll(elem);destElements=getAll(clone);for(i=0;srcElements[i];++i){if(destElements[i]){cloneFixAttributes(srcElements[i],destElements[i]);}}}if(dataAndEvents){cloneCopyEvent(elem,clone);if(deepDataAndEvents){srcElements=getAll(elem);destElements=getAll(clone);for(i=0;srcElements[i];++i){cloneCopyEvent(srcElements[i],destElements[i]);}}}srcElements=destElements=null;return clone;},clean:function(elems,context,fragment,scripts){var checkScriptType;context=context||document;if(typeof context.createElement==="undefined"){context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;}var ret=[],j;for(var i=0,elem;(elem=elems[i])!=null;i++){if(typeof elem==="number"){elem+="";}if(!elem){continue;}if(typeof elem==="string"){if(!rhtml.test(elem)){elem=context.createTextNode(elem);}else{elem=elem.replace(rxhtmlTag,"<$1></$2>");var tag=(rtagName.exec(elem)
+||["",""])[1].toLowerCase(),wrap=wrapMap[tag]||wrapMap._default,depth=wrap[0],div=context.createElement("div");if(context===document){safeFragment.appendChild(div);}else{createSafeFragment(context).appendChild(div);}div.innerHTML=wrap[1]+elem+wrap[2];while(depth--){div=div.lastChild;}if(!jQuery.support.tbody){var hasBody=rtbody.test(elem),tbody=tag==="table"&&!hasBody?div.firstChild&&div.firstChild.childNodes:wrap[1]==="<table>"&&!hasBody?div.childNodes:[];for(j=tbody.length-1;j>=0;--j){if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length){tbody[j].parentNode.removeChild(tbody[j]);}}}if(!jQuery.support.leadingWhitespace&&rleadingWhitespace.test(elem)){div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]),div.firstChild);}elem=div.childNodes;}}var len;if(!jQuery.support.appendChecked){if(elem[0]&&typeof(len=elem.length)==="number"){for(j=0;j<len;j++){findInputs(elem[j]);}}else{findInputs(elem);}}if(elem.nodeType){ret.push(elem);}else{ret=jQuery.merge(ret
+,elem);}}if(fragment){checkScriptType=function(elem){return!elem.type||rscriptType.test(elem.type);};for(i=0;ret[i];i++){if(scripts&&jQuery.nodeName(ret[i],"script")&&(!ret[i].type||ret[i].type.toLowerCase()==="text/javascript")){scripts.push(ret[i].parentNode?ret[i].parentNode.removeChild(ret[i]):ret[i]);}else{if(ret[i].nodeType===1){var jsTags=jQuery.grep(ret[i].getElementsByTagName("script"),checkScriptType);ret.splice.apply(ret,[i+1,0].concat(jsTags));}fragment.appendChild(ret[i]);}}}return ret;},cleanData:function(elems){var data,id,cache=jQuery.cache,special=jQuery.event.special,deleteExpando=jQuery.support.deleteExpando;for(var i=0,elem;(elem=elems[i])!=null;i++){if(elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()]){continue;}id=elem[jQuery.expando];if(id){data=cache[id];if(data&&data.events){for(var type in data.events){if(special[type]){jQuery.event.remove(elem,type);}else{jQuery.removeEvent(elem,type,data.handle);}}if(data.handle){data.handle.elem=null;}}if(
+deleteExpando){delete elem[jQuery.expando];}else if(elem.removeAttribute){elem.removeAttribute(jQuery.expando);}delete cache[id];}}}});function evalScript(i,elem){if(elem.src){jQuery.ajax({url:elem.src,async:false,dataType:"script"});}else{jQuery.globalEval((elem.text||elem.textContent||elem.innerHTML||"").replace(rcleanScript,"/*$0*/"));}if(elem.parentNode){elem.parentNode.removeChild(elem);}}var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity=([^)]*)/,rupper=/([A-Z]|^ms)/g,rnumpx=/^-?\d+(?:px)?$/i,rnum=/^-?\d/,rrelNum=/^([\-+])=([\-+.\de]+)/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssWidth=["Left","Right"],cssHeight=["Top","Bottom"],curCSS,getComputedStyle,currentStyle;jQuery.fn.css=function(name,value){if(arguments.length===2&&value===undefined){return this;}return jQuery.access(this,name,value,true,function(elem,name,value){return value!==undefined?jQuery.style(elem,name,value):jQuery.css(elem,name);});};jQuery.extend({cssHooks:{opacity:{get:function(elem,
+computed){if(computed){var ret=curCSS(elem,"opacity","opacity");return ret===""?"1":ret;}else{return elem.style.opacity;}}}},cssNumber:{"fillOpacity":true,"fontWeight":true,"lineHeight":true,"opacity":true,"orphans":true,"widows":true,"zIndex":true,"zoom":true},cssProps:{"float":jQuery.support.cssFloat?"cssFloat":"styleFloat"},style:function(elem,name,value,extra){if(!elem||elem.nodeType===3||elem.nodeType===8||!elem.style){return;}var ret,type,origName=jQuery.camelCase(name),style=elem.style,hooks=jQuery.cssHooks[origName];name=jQuery.cssProps[origName]||origName;if(value!==undefined){type=typeof value;if(type==="string"&&(ret=rrelNum.exec(value))){value=(+(ret[1]+1)*+ret[2])+parseFloat(jQuery.css(elem,name));type="number";}if(value==null||type==="number"&&isNaN(value)){return;}if(type==="number"&&!jQuery.cssNumber[origName]){value+="px";}if(!hooks||!("set"in hooks)||(value=hooks.set(elem,value))!==undefined){try{style[name]=value;}catch(e){}}}else{if(hooks&&"get"in hooks&&(ret=hooks.
+get(elem,false,extra))!==undefined){return ret;}return style[name];}},css:function(elem,name,extra){var ret,hooks;name=jQuery.camelCase(name);hooks=jQuery.cssHooks[name];name=jQuery.cssProps[name]||name;if(name==="cssFloat"){name="float";}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,true,extra))!==undefined){return ret;}else if(curCSS){return curCSS(elem,name);}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(name in options){elem.style[name]=old[name];}}});jQuery.curCSS=jQuery.css;jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function(elem,computed,extra){var val;if(computed){if(elem.offsetWidth!==0){return getWH(elem,name,extra);}else{jQuery.swap(elem,cssShow,function(){val=getWH(elem,name,extra);});}return val;}},set:function(elem,value){if(rnumpx.test(value)){value=parseFloat(value);if(value>=0){return value+"px";}}else{return value;}}};});if(!
+jQuery.support.opacity){jQuery.cssHooks.opacity={get:function(elem,computed){return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":computed?"1":"";},set:function(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+value*100+")":"",filter=currentStyle&&currentStyle.filter||style.filter||"";style.zoom=1;if(value>=1&&jQuery.trim(filter.replace(ralpha,""))===""){style.removeAttribute("filter");if(currentStyle&&!currentStyle.filter){return;}}style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity;}};}jQuery(function(){if(!jQuery.support.reliableMarginRight){jQuery.cssHooks.marginRight={get:function(elem,computed){var ret;jQuery.swap(elem,{"display":"inline-block"},function(){if(computed){ret=curCSS(elem,"margin-right","marginRight");}else{ret=elem.style.marginRight;}});return ret;}};}});if(document.defaultView&&document.
+defaultView.getComputedStyle){getComputedStyle=function(elem,name){var ret,defaultView,computedStyle;name=name.replace(rupper,"-$1").toLowerCase();if((defaultView=elem.ownerDocument.defaultView)&&(computedStyle=defaultView.getComputedStyle(elem,null))){ret=computedStyle.getPropertyValue(name);if(ret===""&&!jQuery.contains(elem.ownerDocument.documentElement,elem)){ret=jQuery.style(elem,name);}}return ret;};}if(document.documentElement.currentStyle){currentStyle=function(elem,name){var left,rsLeft,uncomputed,ret=elem.currentStyle&&elem.currentStyle[name],style=elem.style;if(ret===null&&style&&(uncomputed=style[name])){ret=uncomputed;}if(!rnumpx.test(ret)&&rnum.test(ret)){left=style.left;rsLeft=elem.runtimeStyle&&elem.runtimeStyle.left;if(rsLeft){elem.runtimeStyle.left=elem.currentStyle.left;}style.left=name==="fontSize"?"1em":(ret||0);ret=style.pixelLeft+"px";style.left=left;if(rsLeft){elem.runtimeStyle.left=rsLeft;}}return ret===""?"auto":ret;};}curCSS=getComputedStyle||currentStyle;
+function getWH(elem,name,extra){var val=name==="width"?elem.offsetWidth:elem.offsetHeight,which=name==="width"?cssWidth:cssHeight,i=0,len=which.length;if(val>0){if(extra!=="border"){for(;i<len;i++){if(!extra){val-=parseFloat(jQuery.css(elem,"padding"+which[i]))||0;}if(extra==="margin"){val+=parseFloat(jQuery.css(elem,extra+which[i]))||0;}else{val-=parseFloat(jQuery.css(elem,"border"+which[i]+"Width"))||0;}}}return val+"px";}val=curCSS(elem,name,name);if(val<0||val==null){val=elem.style[name]||0;}val=parseFloat(val)||0;if(extra){for(;i<len;i++){val+=parseFloat(jQuery.css(elem,"padding"+which[i]))||0;if(extra!=="padding"){val+=parseFloat(jQuery.css(elem,"border"+which[i]+"Width"))||0;}if(extra==="margin"){val+=parseFloat(jQuery.css(elem,extra+which[i]))||0;}}}return val+"px";}if(jQuery.expr&&jQuery.expr.filters){jQuery.expr.filters.hidden=function(elem){var width=elem.offsetWidth,height=elem.offsetHeight;return(width===0&&height===0)||(!jQuery.support.reliableHiddenOffsets&&((elem.style
+&&elem.style.display)||jQuery.css(elem,"display"))==="none");};jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem);};}var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rhash=/#.*$/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,rinput=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,rlocalProtocol=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rquery=/\?/,rscript=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,rselectTextarea=/^(?:select|textarea)/i,rspacesAjax=/\s+/,rts=/([?&])_=[^&]*/,rurl=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,_load=jQuery.fn.load,prefilters={},transports={},ajaxLocation,ajaxLocParts,allTypes=["*/"]+["*"];try{ajaxLocation=location.href;}catch(e){ajaxLocation=document.createElement("a");ajaxLocation.href="";ajaxLocation=ajaxLocation.href;}ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[];function
+addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*";}if(jQuery.isFunction(func)){var dataTypes=dataTypeExpression.toLowerCase().split(rspacesAjax),i=0,length=dataTypes.length,dataType,list,placeBefore;for(;i<length;i++){dataType=dataTypes[i];placeBefore=/^\+/.test(dataType);if(placeBefore){dataType=dataType.substr(1)||"*";}list=structure[dataType]=structure[dataType]||[];list[placeBefore?"unshift":"push"](func);}}};}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR,dataType,inspected){dataType=dataType||options.dataTypes[0];inspected=inspected||{};inspected[dataType]=true;var list=structure[dataType],i=0,length=list?list.length:0,executeOnly=(structure===prefilters),selection;for(;i<length&&(executeOnly||!selection);i++){selection=list[i](options,originalOptions,jqXHR);if(typeof selection==="string"){if(!executeOnly||inspected[selection]){
+selection=undefined;}else{options.dataTypes.unshift(selection);selection=inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR,selection,inspected);}}}if((executeOnly||!selection)&&!inspected["*"]){selection=inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR,"*",inspected);}return selection;}function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:(deep||(deep={})))[key]=src[key];}}if(deep){jQuery.extend(true,target,deep);}}jQuery.fn.extend({load:function(url,params,callback){if(typeof url!=="string"&&_load){return _load.apply(this,arguments);}else if(!this.length){return this;}var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}var type="GET";if(params){if(jQuery.isFunction(params)){callback=params;params=undefined;}else if(typeof params==="object"){params=jQuery.param(params,jQuery.ajaxSettings.
+traditional);type="POST";}}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(jqXHR,status,responseText){responseText=jqXHR.responseText;if(jqXHR.isResolved()){jqXHR.done(function(r){responseText=r;});self.html(selector?jQuery("<div>").append(responseText.replace(rscript,"")).find(selector):responseText);}if(callback){self.each(callback,[responseText,status,jqXHR]);}}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return this.elements?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||rselectTextarea.test(this.nodeName)||rinput.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val,i){return{name:elem.name,value:val.replace(rCRLF,"\r\n")};}):{name:elem.name,value:val.replace(rCRLF,"\r\n")};}).get();}});jQuery.each(
+"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(i,o){jQuery.fn[o]=function(f){return this.on(o,f);};});jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=undefined;}return jQuery.ajax({type:method,url:url,data:data,success:callback,dataType:type});};});jQuery.extend({getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},ajaxSetup:function(target,settings){if(settings){ajaxExtend(target,jQuery.ajaxSettings);}else{settings=target;target=jQuery.ajaxSettings;}ajaxExtend(target,settings);return target;},ajaxSettings:{url:ajaxLocation,isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",
+text:"text/plain",json:"application/json, text/javascript","*":allTypes},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":window.String,"text html":true,"text json":jQuery.parseJSON,"text xml":jQuery.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined;}options=options||{};var s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=callbackContext!==s&&(callbackContext.nodeType||callbackContext instanceof jQuery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},ifModifiedKey,requestHeaders={},requestHeadersNames={},responseHeadersString,responseHeaders,transport,timeoutTimer,parts,state=0,fireGlobals,i,jqXHR={readyState:0,
+setRequestHeader:function(name,value){if(!state){var lname=name.toLowerCase();name=requestHeadersNames[lname]=requestHeadersNames[lname]||name;requestHeaders[name]=value;}return this;},getAllResponseHeaders:function(){return state===2?responseHeadersString:null;},getResponseHeader:function(key){var match;if(state===2){if(!responseHeaders){responseHeaders={};while((match=rheaders.exec(responseHeadersString))){responseHeaders[match[1].toLowerCase()]=match[2];}}match=responseHeaders[key.toLowerCase()];}return match===undefined?null:match;},overrideMimeType:function(type){if(!state){s.mimeType=type;}return this;},abort:function(statusText){statusText=statusText||"abort";if(transport){transport.abort(statusText);}done(0,statusText);return this;}};function done(status,nativeStatusText,responses,headers){if(state===2){return;}state=2;if(timeoutTimer){clearTimeout(timeoutTimer);}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;var isSuccess,success,error,
+statusText=nativeStatusText,response=responses?ajaxHandleResponses(s,jqXHR,responses):undefined,lastModified,etag;if(status>=200&&status<300||status===304){if(s.ifModified){if((lastModified=jqXHR.getResponseHeader("Last-Modified"))){jQuery.lastModified[ifModifiedKey]=lastModified;}if((etag=jqXHR.getResponseHeader("Etag"))){jQuery.etag[ifModifiedKey]=etag;}}if(status===304){statusText="notmodified";isSuccess=true;}else{try{success=ajaxConvert(s,response);statusText="success";isSuccess=true;}catch(e){statusText="parsererror";error=e;}}}else{error=statusText;if(!statusText||status){statusText="error";if(status<0){status=0;}}}jqXHR.status=status;jqXHR.statusText=""+(nativeStatusText||statusText);if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR]);}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error]);}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger("ajax"+(isSuccess?"Success":"Error"),[jqXHR,s,isSuccess?
+success:error]);}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!(--jQuery.active)){jQuery.event.trigger("ajaxStop");}}}deferred.promise(jqXHR);jqXHR.success=jqXHR.done;jqXHR.error=jqXHR.fail;jqXHR.complete=completeDeferred.add;jqXHR.statusCode=function(map){if(map){var tmp;if(state<2){for(tmp in map){statusCode[tmp]=[statusCode[tmp],map[tmp]];}}else{tmp=map[jqXHR.status];jqXHR.then(tmp,tmp);}}return this;};s.url=((url||s.url)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//");s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().split(rspacesAjax);if(s.crossDomain==null){parts=rurl.exec(s.url.toLowerCase());s.crossDomain=!!(parts&&(parts[1]!=ajaxLocParts[1]||parts[2]!=ajaxLocParts[2]||(parts[3]||(parts[1]==="http:"?80:443))!=(ajaxLocParts[3]||(ajaxLocParts[1]==="http:"?80:443))));}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional);}
+inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(state===2){return false;}fireGlobals=s.global;s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart");}if(!s.hasContent){if(s.data){s.url+=(rquery.test(s.url)?"&":"?")+s.data;delete s.data;}ifModifiedKey=s.url;if(s.cache===false){var ts=jQuery.now(),ret=s.url.replace(rts,"$1_="+ts);s.url=ret+((ret===s.url)?(rquery.test(s.url)?"&":"?")+"_="+ts:"");}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType);}if(s.ifModified){ifModifiedKey=ifModifiedKey||s.url;if(jQuery.lastModified[ifModifiedKey]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[ifModifiedKey]);}if(jQuery.etag[ifModifiedKey]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[ifModifiedKey]);}}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[
+0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i]);}if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||state===2)){jqXHR.abort();return false;}for(i in{success:1,error:1,complete:1}){jqXHR[i](s[i]);}transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport");}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s]);}if(s.async&&s.timeout>0){timeoutTimer=setTimeout(function(){jqXHR.abort("timeout");},s.timeout);}try{state=1;transport.send(requestHeaders,done);}catch(e){if(state<2){done(-1,e);}else{throw e;}}}return jqXHR;},param:function(a,traditional){var s=[],add=function(key,value){value=jQuery.isFunction(value)?value():value;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value);};if(traditional===undefined){traditional=jQuery.ajaxSettings.traditional;}if(jQuery.isArray(a)||(a.jquery&&!jQuery.isPlainObject(a))){
+jQuery.each(a,function(){add(this.name,this.value);});}else{for(var prefix in a){buildParams(prefix,a[prefix],traditional,add);}}return s.join("&").replace(r20,"+");}});function buildParams(prefix,obj,traditional,add){if(jQuery.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v);}else{buildParams(prefix+"["+(typeof v==="object"||jQuery.isArray(v)?i:"")+"]",v,traditional,add);}});}else if(!traditional&&obj!=null&&typeof obj==="object"){for(var name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add);}}else{add(prefix,obj);}}jQuery.extend({active:0,lastModified:{},etag:{}});function ajaxHandleResponses(s,jqXHR,responses){var contents=s.contents,dataTypes=s.dataTypes,responseFields=s.responseFields,ct,type,finalDataType,firstDataType;for(type in responseFields){if(type in responses){jqXHR[responseFields[type]]=responses[type];}}while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader(
+"content-type");}}if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break;}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0];}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break;}if(!firstDataType){firstDataType=type;}}finalDataType=finalDataType||firstDataType;}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType);}return responses[finalDataType];}}function ajaxConvert(s,response){if(s.dataFilter){response=s.dataFilter(response,s.dataType);}var dataTypes=s.dataTypes,converters={},i,key,length=dataTypes.length,tmp,current=dataTypes[0],prev,conversion,conv,conv1,conv2;for(i=1;i<length;i++){if(i===1){for(key in s.converters){if(typeof key==="string"){converters[key.toLowerCase()]=s.converters[key];}}}prev=current;current=dataTypes[i];if(current==="*"){current=prev;}else if(prev!=="*"&&prev!==current){conversion=prev+" "+current;conv=converters[
+conversion]||converters["* "+current];if(!conv){conv2=undefined;for(conv1 in converters){tmp=conv1.split(" ");if(tmp[0]===prev||tmp[0]==="*"){conv2=converters[tmp[1]+" "+current];if(conv2){conv1=converters[conv1];if(conv1===true){conv=conv2;}else if(conv2===true){conv=conv1;}break;}}}}if(!(conv||conv2)){jQuery.error("No conversion from "+conversion.replace(" "," to "));}if(conv!==true){response=conv?conv(response):conv2(conv1(response));}}}return response;}var jsc=jQuery.now(),jsre=/(\=)\?(&|$)|\?\?/i;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return jQuery.expando+"_"+(jsc++);}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var inspectData=s.contentType==="application/x-www-form-urlencoded"&&(typeof s.data==="string");if(s.dataTypes[0]==="jsonp"||s.jsonp!==false&&(jsre.test(s.url)||inspectData&&jsre.test(s.data))){var responseContainer,jsonpCallback=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback,previous=
+window[jsonpCallback],url=s.url,data=s.data,replace="$1"+jsonpCallback+"$2";if(s.jsonp!==false){url=url.replace(jsre,replace);if(s.url===url){if(inspectData){data=data.replace(jsre,replace);}if(s.data===data){url+=(/\?/.test(url)?"&":"?")+s.jsonp+"="+jsonpCallback;}}}s.url=url;s.data=data;window[jsonpCallback]=function(response){responseContainer=[response];};jqXHR.always(function(){window[jsonpCallback]=previous;if(responseContainer&&jQuery.isFunction(previous)){window[jsonpCallback](responseContainer[0]);}});s.converters["script json"]=function(){if(!responseContainer){jQuery.error(jsonpCallback+" was not called");}return responseContainer[0];};s.dataTypes[0]="json";return"script";}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(text){jQuery.globalEval(text);return text;}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache
+===undefined){s.cache=false;}if(s.crossDomain){s.type="GET";s.global=false;}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||document.getElementsByTagName("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script");script.async="async";if(s.scriptCharset){script.charset=s.scriptCharset;}script.src=s.url;script.onload=script.onreadystatechange=function(_,isAbort){if(isAbort||!script.readyState||/loaded|complete/.test(script.readyState)){script.onload=script.onreadystatechange=null;if(head&&script.parentNode){head.removeChild(script);}script=undefined;if(!isAbort){callback(200,"success");}}};head.insertBefore(script,head.firstChild);},abort:function(){if(script){script.onload(0,1);}}};}});var xhrOnUnloadAbort=window.ActiveXObject?function(){for(var key in xhrCallbacks){xhrCallbacks[key](0,1);}}:false,xhrId=0,xhrCallbacks;function createStandardXHR(){try{return new window.XMLHttpRequest();}catch
+(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}jQuery.ajaxSettings.xhr=window.ActiveXObject?function(){return!this.isLocal&&createStandardXHR()||createActiveXHR();}:createStandardXHR;(function(xhr){jQuery.extend(jQuery.support,{ajax:!!xhr,cors:!!xhr&&("withCredentials"in xhr)});})(jQuery.ajaxSettings.xhr());if(jQuery.support.ajax){jQuery.ajaxTransport(function(s){if(!s.crossDomain||jQuery.support.cors){var callback;return{send:function(headers,complete){var xhr=s.xhr(),handle,i;if(s.username){xhr.open(s.type,s.url,s.async,s.username,s.password);}else{xhr.open(s.type,s.url,s.async);}if(s.xhrFields){for(i in s.xhrFields){xhr[i]=s.xhrFields[i];}}if(s.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(s.mimeType);}if(!s.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest";}try{for(i in headers){xhr.setRequestHeader(i,headers[i]);}}catch(_){}xhr.send((s.hasContent&&s.data)||null);callback=function(_,
+isAbort){var status,statusText,responseHeaders,responses,xml;try{if(callback&&(isAbort||xhr.readyState===4)){callback=undefined;if(handle){xhr.onreadystatechange=jQuery.noop;if(xhrOnUnloadAbort){delete xhrCallbacks[handle];}}if(isAbort){if(xhr.readyState!==4){xhr.abort();}}else{status=xhr.status;responseHeaders=xhr.getAllResponseHeaders();responses={};xml=xhr.responseXML;if(xml&&xml.documentElement){responses.xml=xml;}responses.text=xhr.responseText;try{statusText=xhr.statusText;}catch(e){statusText="";}if(!status&&s.isLocal&&!s.crossDomain){status=responses.text?200:404;}else if(status===1223){status=204;}}}}catch(firefoxAccessException){if(!isAbort){complete(-1,firefoxAccessException);}}if(responses){complete(status,statusText,responses,responseHeaders);}};if(!s.async||xhr.readyState===4){callback();}else{handle=++xhrId;if(xhrOnUnloadAbort){if(!xhrCallbacks){xhrCallbacks={};jQuery(window).unload(xhrOnUnloadAbort);}xhrCallbacks[handle]=callback;}xhr.onreadystatechange=callback;}},
+abort:function(){if(callback){callback(0,1);}}};}});}var elemdisplay={},iframe,iframeDoc,rfxtypes=/^(?:toggle|show|hide)$/,rfxnum=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,timerId,fxAttrs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],fxNow;jQuery.fn.extend({show:function(speed,easing,callback){var elem,display;if(speed||speed===0){return this.animate(genFx("show",3),speed,easing,callback);}else{for(var i=0,j=this.length;i<j;i++){elem=this[i];if(elem.style){display=elem.style.display;if(!jQuery._data(elem,"olddisplay")&&display==="none"){display=elem.style.display="";}if(display===""&&jQuery.css(elem,"display")==="none"){jQuery._data(elem,"olddisplay",defaultDisplay(elem.nodeName));}}}for(i=0;i<j;i++){elem=this[i];if(elem.style){display=elem.style.display;if(display===""||display==="none"){elem.style.display=jQuery._data(elem,"olddisplay")||"";}}}return this;}},hide:function(speed,easing,
+callback){if(speed||speed===0){return this.animate(genFx("hide",3),speed,easing,callback);}else{var elem,display,i=0,j=this.length;for(;i<j;i++){elem=this[i];if(elem.style){display=jQuery.css(elem,"display");if(display!=="none"&&!jQuery._data(elem,"olddisplay")){jQuery._data(elem,"olddisplay",display);}}}for(i=0;i<j;i++){if(this[i].style){this[i].style.display="none";}}return this;}},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2,callback){var bool=typeof fn==="boolean";if(jQuery.isFunction(fn)&&jQuery.isFunction(fn2)){this._toggle.apply(this,arguments);}else if(fn==null||bool){this.each(function(){var state=bool?fn:jQuery(this).is(":hidden");jQuery(this)[state?"show":"hide"]();});}else{this.animate(genFx("toggle",3),fn,fn2,callback);}return this;},fadeTo:function(speed,to,easing,callback){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:to},speed,easing,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);
+if(jQuery.isEmptyObject(prop)){return this.each(optall.complete,[false]);}prop=jQuery.extend({},prop);function doAnimation(){if(optall.queue===false){jQuery._mark(this);}var opt=jQuery.extend({},optall),isElement=this.nodeType===1,hidden=isElement&&jQuery(this).is(":hidden"),name,val,p,e,parts,start,end,unit,method;opt.animatedProperties={};for(p in prop){name=jQuery.camelCase(p);if(p!==name){prop[name]=prop[p];delete prop[p];}val=prop[name];if(jQuery.isArray(val)){opt.animatedProperties[name]=val[1];val=prop[name]=val[0];}else{opt.animatedProperties[name]=opt.specialEasing&&opt.specialEasing[name]||opt.easing||'swing';}if(val==="hide"&&hidden||val==="show"&&!hidden){return opt.complete.call(this);}if(isElement&&(name==="height"||name==="width")){opt.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(jQuery.css(this,"display")==="inline"&&jQuery.css(this,"float")==="none"){if(!jQuery.support.inlineBlockNeedsLayout||defaultDisplay(this.nodeName)==="inline"){this
+.style.display="inline-block";}else{this.style.zoom=1;}}}}if(opt.overflow!=null){this.style.overflow="hidden";}for(p in prop){e=new jQuery.fx(this,opt,p);val=prop[p];if(rfxtypes.test(val)){method=jQuery._data(this,"toggle"+p)||(val==="toggle"?hidden?"show":"hide":0);if(method){jQuery._data(this,"toggle"+p,method==="show"?"hide":"show");e[method]();}else{e[val]();}}else{parts=rfxnum.exec(val);start=e.cur();if(parts){end=parseFloat(parts[2]);unit=parts[3]||(jQuery.cssNumber[p]?"":"px");if(unit!=="px"){jQuery.style(this,p,(end||1)+unit);start=((end||1)/e.cur())*start;jQuery.style(this,p,start+unit);}if(parts[1]){end=((parts[1]==="-="?-1:1)*end)+start;}e.custom(start,end,unit);}else{e.custom(start,val,"");}}}return true;}return optall.queue===false?this.each(doAnimation):this.queue(optall.queue,doAnimation);},stop:function(type,clearQueue,gotoEnd){if(typeof type!=="string"){gotoEnd=clearQueue;clearQueue=type;type=undefined;}if(clearQueue&&type!==false){this.queue(type||"fx",[]);}return this
+.each(function(){var index,hadTimers=false,timers=jQuery.timers,data=jQuery._data(this);if(!gotoEnd){jQuery._unmark(true,this);}function stopQueue(elem,data,index){var hooks=data[index];jQuery.removeData(elem,index,true);hooks.stop(gotoEnd);}if(type==null){for(index in data){if(data[index]&&data[index].stop&&index.indexOf(".run")===index.length-4){stopQueue(this,data,index);}}}else if(data[index=type+".run"]&&data[index].stop){stopQueue(this,data,index);}for(index=timers.length;index--;){if(timers[index].elem===this&&(type==null||timers[index].queue===type)){if(gotoEnd){timers[index](true);}else{timers[index].saveState();}hadTimers=true;timers.splice(index,1);}}if(!(gotoEnd&&hadTimers)){jQuery.dequeue(this,type);}});}});function createFxNow(){setTimeout(clearFxNow,0);return(fxNow=jQuery.now());}function clearFxNow(){fxNow=undefined;}function genFx(type,num){var obj={};jQuery.each(fxAttrs.concat.apply([],fxAttrs.slice(0,num)),function(){obj[this]=type;});return obj;}jQuery.each({
+slideDown:genFx("show",1),slideUp:genFx("hide",1),slideToggle:genFx("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback);};});jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&typeof speed==="object"?jQuery.extend({},speed):{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};opt.duration=jQuery.fx.off?0:typeof opt.duration==="number"?opt.duration:opt.duration in jQuery.fx.speeds?jQuery.fx.speeds[opt.duration]:jQuery.fx.speeds._default;if(opt.queue==null||opt.queue===true){opt.queue="fx";}opt.old=opt.complete;opt.complete=function(noUnmark){if(jQuery.isFunction(opt.old)){opt.old.call(this);}if(opt.queue){jQuery.dequeue(this,opt.queue);}else if(noUnmark!==false){jQuery._unmark(this);}};return opt;},easing:{linear:function(p,n,firstNum,
+diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;options.orig=options.orig||{};}});jQuery.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this);}(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop];}var parsed,r=jQuery.css(this.elem,this.prop);return isNaN(parsed=parseFloat(r))?!r||r==="auto"?0:r:parsed;},custom:function(from,to,unit){var self=this,fx=jQuery.fx;this.startTime=fxNow||createFxNow();this.end=to;this.now=this.start=from;this.pos=this.state=0;this.unit=unit||this.unit||(jQuery.cssNumber[this.prop]?"":"px");function t(gotoEnd){return self.step(gotoEnd);}t.queue=this.options.queue;t.elem=this.elem;t.saveState=function(){if(self.options.
+hide&&jQuery._data(self.elem,"fxshow"+self.prop)===undefined){jQuery._data(self.elem,"fxshow"+self.prop,self.start);}};if(t()&&jQuery.timers.push(t)&&!timerId){timerId=setInterval(fx.tick,fx.interval);}},show:function(){var dataShow=jQuery._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=dataShow||jQuery.style(this.elem,this.prop);this.options.show=true;if(dataShow!==undefined){this.custom(this.cur(),dataShow);}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());}jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery._data(this.elem,"fxshow"+this.prop)||jQuery.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var p,n,complete,t=fxNow||createFxNow(),done=true,elem=this.elem,options=this.options;if(gotoEnd||t>=options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();options.animatedProperties[this.prop]=true;for(p in options.animatedProperties){
+if(options.animatedProperties[p]!==true){done=false;}}if(done){if(options.overflow!=null&&!jQuery.support.shrinkWrapBlocks){jQuery.each(["","X","Y"],function(index,value){elem.style["overflow"+value]=options.overflow[index];});}if(options.hide){jQuery(elem).hide();}if(options.hide||options.show){for(p in options.animatedProperties){jQuery.style(elem,p,options.orig[p]);jQuery.removeData(elem,"fxshow"+p,true);jQuery.removeData(elem,"toggle"+p,true);}}complete=options.complete;if(complete){options.complete=false;complete.call(elem);}}return false;}else{if(options.duration==Infinity){this.now=t;}else{n=t-this.startTime;this.state=n/options.duration;this.pos=jQuery.easing[options.animatedProperties[this.prop]](this.state,n,0,1,options.duration);this.now=this.start+((this.end-this.start)*this.pos);}this.update();}return true;}};jQuery.extend(jQuery.fx,{tick:function(){var timer,timers=jQuery.timers,i=0;for(;i<timers.length;i++){timer=timers[i];if(!timer()&&timers[i]===timer){timers.splice(i--
+,1);}}if(!timers.length){jQuery.fx.stop();}},interval:13,stop:function(){clearInterval(timerId);timerId=null;},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(fx){jQuery.style(fx.elem,"opacity",fx.now);},_default:function(fx){if(fx.elem.style&&fx.elem.style[fx.prop]!=null){fx.elem.style[fx.prop]=fx.now+fx.unit;}else{fx.elem[fx.prop]=fx.now;}}}});jQuery.each(["width","height"],function(i,prop){jQuery.fx.step[prop]=function(fx){jQuery.style(fx.elem,prop,Math.max(0,fx.now)+fx.unit);};});if(jQuery.expr&&jQuery.expr.filters){jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem;}).length;};}function defaultDisplay(nodeName){if(!elemdisplay[nodeName]){var body=document.body,elem=jQuery("<"+nodeName+">").appendTo(body),display=elem.css("display");elem.remove();if(display==="none"||display===""){if(!iframe){iframe=document.createElement("iframe");iframe.frameBorder=iframe.width=iframe.height=0;}body.appendChild(iframe);if
+(!iframeDoc||!iframe.createElement){iframeDoc=(iframe.contentWindow||iframe.contentDocument).document;iframeDoc.write((document.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");iframeDoc.close();}elem=iframeDoc.createElement(nodeName);iframeDoc.body.appendChild(elem);display=jQuery.css(elem,"display");body.removeChild(iframe);}elemdisplay[nodeName]=display;}return elemdisplay[nodeName];}var rtable=/^t(?:able|d|h)$/i,rroot=/^(?:body|html)$/i;if("getBoundingClientRect"in document.documentElement){jQuery.fn.offset=function(options){var elem=this[0],box;if(options){return this.each(function(i){jQuery.offset.setOffset(this,options,i);});}if(!elem||!elem.ownerDocument){return null;}if(elem===elem.ownerDocument.body){return jQuery.offset.bodyOffset(elem);}try{box=elem.getBoundingClientRect();}catch(e){}var doc=elem.ownerDocument,docElem=doc.documentElement;if(!box||!jQuery.contains(docElem,elem)){return box?{top:box.top,left:box.left}:{top:0,left:0};}var body=doc.body,win=
+getWindow(doc),clientTop=docElem.clientTop||body.clientTop||0,clientLeft=docElem.clientLeft||body.clientLeft||0,scrollTop=win.pageYOffset||jQuery.support.boxModel&&docElem.scrollTop||body.scrollTop,scrollLeft=win.pageXOffset||jQuery.support.boxModel&&docElem.scrollLeft||body.scrollLeft,top=box.top+scrollTop-clientTop,left=box.left+scrollLeft-clientLeft;return{top:top,left:left};};}else{jQuery.fn.offset=function(options){var elem=this[0];if(options){return this.each(function(i){jQuery.offset.setOffset(this,options,i);});}if(!elem||!elem.ownerDocument){return null;}if(elem===elem.ownerDocument.body){return jQuery.offset.bodyOffset(elem);}var computedStyle,offsetParent=elem.offsetParent,prevOffsetParent=elem,doc=elem.ownerDocument,docElem=doc.documentElement,body=doc.body,defaultView=doc.defaultView,prevComputedStyle=defaultView?defaultView.getComputedStyle(elem,null):elem.currentStyle,top=elem.offsetTop,left=elem.offsetLeft;while((elem=elem.parentNode)&&elem!==body&&elem!==docElem){if(
+jQuery.support.fixedPosition&&prevComputedStyle.position==="fixed"){break;}computedStyle=defaultView?defaultView.getComputedStyle(elem,null):elem.currentStyle;top-=elem.scrollTop;left-=elem.scrollLeft;if(elem===offsetParent){top+=elem.offsetTop;left+=elem.offsetLeft;if(jQuery.support.doesNotAddBorder&&!(jQuery.support.doesAddBorderForTableAndCells&&rtable.test(elem.nodeName))){top+=parseFloat(computedStyle.borderTopWidth)||0;left+=parseFloat(computedStyle.borderLeftWidth)||0;}prevOffsetParent=offsetParent;offsetParent=elem.offsetParent;}if(jQuery.support.subtractsBorderForOverflowNotVisible&&computedStyle.overflow!=="visible"){top+=parseFloat(computedStyle.borderTopWidth)||0;left+=parseFloat(computedStyle.borderLeftWidth)||0;}prevComputedStyle=computedStyle;}if(prevComputedStyle.position==="relative"||prevComputedStyle.position==="static"){top+=body.offsetTop;left+=body.offsetLeft;}if(jQuery.support.fixedPosition&&prevComputedStyle.position==="fixed"){top+=Math.max(docElem.scrollTop,
+body.scrollTop);left+=Math.max(docElem.scrollLeft,body.scrollLeft);}return{top:top,left:left};};}jQuery.offset={bodyOffset:function(body){var top=body.offsetTop,left=body.offsetLeft;if(jQuery.support.doesNotIncludeMarginInBodyOffset){top+=parseFloat(jQuery.css(body,"marginTop"))||0;left+=parseFloat(jQuery.css(body,"marginLeft"))||0;}return{top:top,left:left};},setOffset:function(elem,options,i){var position=jQuery.css(elem,"position");if(position==="static"){elem.style.position="relative";}var curElem=jQuery(elem),curOffset=curElem.offset(),curCSSTop=jQuery.css(elem,"top"),curCSSLeft=jQuery.css(elem,"left"),calculatePosition=(position==="absolute"||position==="fixed")&&jQuery.inArray("auto",[curCSSTop,curCSSLeft])>-1,props={},curPosition={},curTop,curLeft;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left;}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0;}if(jQuery.isFunction(options)){options=options.call(elem,i,
+curOffset);}if(options.top!=null){props.top=(options.top-curOffset.top)+curTop;}if(options.left!=null){props.left=(options.left-curOffset.left)+curLeft;}if("using"in options){options.using.call(elem,props);}else{curElem.css(props);}}};jQuery.fn.extend({position:function(){if(!this[0]){return null;}var elem=this[0],offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=rroot.test(offsetParent[0].nodeName)?{top:0,left:0}:offsetParent.offset();offset.top-=parseFloat(jQuery.css(elem,"marginTop"))||0;offset.left-=parseFloat(jQuery.css(elem,"marginLeft"))||0;parentOffset.top+=parseFloat(jQuery.css(offsetParent[0],"borderTopWidth"))||0;parentOffset.left+=parseFloat(jQuery.css(offsetParent[0],"borderLeftWidth"))||0;return{top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent||document.body;while(offsetParent&&(!rroot.test(offsetParent.nodeName)&&jQuery.css(offsetParent,"position")
+==="static")){offsetParent=offsetParent.offsetParent;}return offsetParent;});}});jQuery.each(["Left","Top"],function(i,name){var method="scroll"+name;jQuery.fn[method]=function(val){var elem,win;if(val===undefined){elem=this[0];if(!elem){return null;}win=getWindow(elem);return win?("pageXOffset"in win)?win[i?"pageYOffset":"pageXOffset"]:jQuery.support.boxModel&&win.document.documentElement[method]||win.document.body[method]:elem[method];}return this.each(function(){win=getWindow(this);if(win){win.scrollTo(!i?val:jQuery(win).scrollLeft(),i?val:jQuery(win).scrollTop());}else{this[method]=val;}});};});function getWindow(elem){return jQuery.isWindow(elem)?elem:elem.nodeType===9?elem.defaultView||elem.parentWindow:false;}jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn["inner"+name]=function(){var elem=this[0];return elem?elem.style?parseFloat(jQuery.css(elem,type,"padding")):this[type]():null;};jQuery.fn["outer"+name]=function(margin){var elem=this[0];
+return elem?elem.style?parseFloat(jQuery.css(elem,type,margin?"margin":"border")):this[type]():null;};jQuery.fn[type]=function(size){var elem=this[0];if(!elem){return size==null?null:this;}if(jQuery.isFunction(size)){return this.each(function(i){var self=jQuery(this);self[type](size.call(this,i,self[type]()));});}if(jQuery.isWindow(elem)){var docElemProp=elem.document.documentElement["client"+name],body=elem.document.body;return elem.document.compatMode==="CSS1Compat"&&docElemProp||body&&body["client"+name]||docElemProp;}else if(elem.nodeType===9){return Math.max(elem.documentElement["client"+name],elem.body["scroll"+name],elem.documentElement["scroll"+name],elem.body["offset"+name],elem.documentElement["offset"+name]);}else if(size===undefined){var orig=jQuery.css(elem,type),ret=parseFloat(orig);return jQuery.isNumeric(ret)?ret:orig;}else{return this.css(type,typeof size==="string"?size:size+"px");}};});window.jQuery=window.$=jQuery;if(typeof define==="function"&&define.amd&&define.
+amd.jQuery){define("jquery",[],function(){return jQuery;});}})(window);;var mw=(function($,undefined){"use strict";var hasOwn=Object.prototype.hasOwnProperty;function Map(global){this.values=global===true?window:{};return this;}Map.prototype={get:function(selection,fallback){var results,i;if($.isArray(selection)){selection=$.makeArray(selection);results={};for(i=0;i<selection.length;i+=1){results[selection[i]]=this.get(selection[i],fallback);}return results;}else if(typeof selection==='string'){if(this.values[selection]===undefined){if(fallback!==undefined){return fallback;}return null;}return this.values[selection];}if(selection===undefined){return this.values;}else{return null;}},set:function(selection,value){var s;if($.isPlainObject(selection)){for(s in selection){this.values[s]=selection[s];}return true;}else if(typeof selection==='string'&&value!==undefined){this.values[selection]=value;return true;}return false;},exists:function(selection){var s;if($.isArray(selection)){for(s=0;s
+<selection.length;s+=1){if(this.values[selection[s]]===undefined){return false;}}return true;}else{return this.values[selection]!==undefined;}}};function Message(map,key,parameters){this.format='plain';this.map=map;this.key=key;this.parameters=parameters===undefined?[]:$.makeArray(parameters);return this;}Message.prototype={parser:function(){var parameters=this.parameters;return this.map.get(this.key).replace(/\$(\d+)/g,function(str,match){var index=parseInt(match,10)-1;return parameters[index]!==undefined?parameters[index]:'$'+match;});},params:function(parameters){var i;for(i=0;i<parameters.length;i+=1){this.parameters.push(parameters[i]);}return this;},toString:function(){var text;if(!this.exists()){if(this.format!=='plain'){return mw.html.escape('<'+this.key+'>');}return'<'+this.key+'>';}if(this.format==='plain'){text=this.parser();}if(this.format==='escaped'){text=this.parser();text=mw.html.escape(text);}if(this.format==='parse'){text=this.parser();}return text;},parse:function(){
+this.format='parse';return this.toString();},plain:function(){this.format='plain';return this.toString();},escaped:function(){this.format='escaped';return this.toString();},exists:function(){return this.map.exists(this.key);}};return{log:function(){},Map:Map,Message:Message,config:null,libs:{},legacy:{},messages:new Map(),message:function(key,parameter_1){var parameters;if(parameter_1!==undefined){parameters=$.makeArray(arguments);parameters.shift();}else{parameters=[];}return new Message(mw.messages,key,parameters);},msg:function(key,parameters){return mw.message.apply(mw.message,arguments).toString();},loader:(function(){var registry={},sources={},batch=[],queue=[],jobs=[],ready=false,$marker=null;$(document).ready(function(){ready=true;});function getMarker(){if($marker){return $marker;}else{$marker=$('meta[name="ResourceLoaderDynamicStyles"]');if($marker.length){return $marker;}mw.log('getMarker> No <meta name="ResourceLoaderDynamicStyles"> found, inserting dynamically.');$marker=$
+('<meta>').attr('name','ResourceLoaderDynamicStyles').appendTo('head');return $marker;}}function addInlineCSS(css,media){var $style=getMarker().prev(),$newStyle,attrs={'type':'text/css','media':media};if($style.is('style')&&$style.data('ResourceLoaderDynamicStyleTag')===true){try{css=$(mw.html.element('style',{},new mw.html.Cdata("\n\n"+css))).html();$style.append(css);}catch(e){css=$style.html()+"\n\n"+css;$newStyle=$(mw.html.element('style',attrs,new mw.html.Cdata(css))).data('ResourceLoaderDynamicStyleTag',true);$style.after($newStyle);$style.remove();}}else{$style=$(mw.html.element('style',attrs,new mw.html.Cdata(css)));$style.data('ResourceLoaderDynamicStyleTag',true);getMarker().before($style);}}function compare(a,b){var i;if(a.length!==b.length){return false;}for(i=0;i<b.length;i+=1){if($.isArray(a[i])){if(!compare(a[i],b[i])){return false;}}if(a[i]!==b[i]){return false;}}return true;}function formatVersionNumber(timestamp){var pad=function(a,b,c){return[a<10?'0'+a:a,b<10?'0'+b:
+b,c<10?'0'+c:c].join('');},d=new Date();d.setTime(timestamp*1000);return[pad(d.getUTCFullYear(),d.getUTCMonth()+1,d.getUTCDate()),'T',pad(d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds()),'Z'].join('');}function recurse(module,resolved,unresolved){var n,deps,len;if(registry[module]===undefined){throw new Error('Unknown dependency: '+module);}if($.isFunction(registry[module].dependencies)){registry[module].dependencies=registry[module].dependencies();if(typeof registry[module].dependencies!=='object'){registry[module].dependencies=[registry[module].dependencies];}}deps=registry[module].dependencies;len=deps.length;for(n=0;n<len;n+=1){if($.inArray(deps[n],resolved)===-1){if($.inArray(deps[n],unresolved)!==-1){throw new Error('Circular reference detected: '+module+' -> '+deps[n]);}unresolved[unresolved.length]=module;recurse(deps[n],resolved,unresolved);unresolved.pop();}}resolved[resolved.length]=module;}function resolve(module){var modules,m,deps,n,resolved;if($.isArray(module)){
+modules=[];for(m=0;m<module.length;m+=1){deps=resolve(module[m]);for(n=0;n<deps.length;n+=1){modules[modules.length]=deps[n];}}return modules;}else if(typeof module==='string'){resolved=[];recurse(module,resolved,[]);return resolved;}throw new Error('Invalid module argument: '+module);}function filter(states,modules){var list,module,s,m;if(typeof states==='string'){states=[states];}list=[];if(modules===undefined){modules=[];for(module in registry){modules[modules.length]=module;}}for(s=0;s<states.length;s+=1){for(m=0;m<modules.length;m+=1){if(registry[modules[m]]===undefined){if(states[s]==='unregistered'){list[list.length]=modules[m];}}else{if(registry[modules[m]].state===states[s]){list[list.length]=modules[m];}}}}return list;}function handlePending(module){var j,r;try{for(j=0;j<jobs.length;j+=1){if(compare(filter('ready',jobs[j].dependencies),jobs[j].dependencies)){var callback=jobs[j].ready;jobs.splice(j,1);j-=1;if($.isFunction(callback)){callback();}}}for(r in registry){if(
+registry[r].state==='loaded'){if(compare(filter(['ready'],registry[r].dependencies),registry[r].dependencies)){execute(r);}}}}catch(e){for(j=0;j<jobs.length;j+=1){if($.inArray(module,jobs[j].dependencies)!==-1){if($.isFunction(jobs[j].error)){jobs[j].error(e,module);}jobs.splice(j,1);j-=1;}}throw e;}}function addScript(src,callback,async){var done=false,script,head;if(ready||async){script=document.createElement('script');script.setAttribute('src',src);script.setAttribute('type','text/javascript');if($.isFunction(callback)){script.onload=script.onreadystatechange=function(){if(!done&&(!script.readyState||/loaded|complete/.test(script.readyState))){done=true;callback();try{script.onload=script.onreadystatechange=null;if(script.parentNode){script.parentNode.removeChild(script);}script=undefined;}catch(e){}}};}if(window.opera){$(function(){document.body.appendChild(script);});}else{head=document.getElementsByTagName('head')[0];(document.body||head).appendChild(script);}}else{document.write
+(mw.html.element('script',{'type':'text/javascript','src':src},''));if($.isFunction(callback)){callback();}}}function execute(module,callback){var style,media,i,script,markModuleReady,nestedAddScript;if(registry[module]===undefined){throw new Error('Module has not been registered yet: '+module);}else if(registry[module].state==='registered'){throw new Error('Module has not been requested from the server yet: '+module);}else if(registry[module].state==='loading'){throw new Error('Module has not completed loading yet: '+module);}else if(registry[module].state==='ready'){throw new Error('Module has already been loaded: '+module);}if($.isPlainObject(registry[module].style)){for(media in registry[module].style){style=registry[module].style[media];if($.isArray(style)){for(i=0;i<style.length;i+=1){getMarker().before(mw.html.element('link',{'type':'text/css','media':media,'rel':'stylesheet','href':style[i]}));}}else if(typeof style==='string'){addInlineCSS(style,media);}}}if($.isPlainObject(
+registry[module].messages)){mw.messages.set(registry[module].messages);}try{script=registry[module].script;markModuleReady=function(){registry[module].state='ready';handlePending(module);if($.isFunction(callback)){callback();}};nestedAddScript=function(arr,callback,async,i){if(i>=arr.length){callback();return;}addScript(arr[i],function(){nestedAddScript(arr,callback,async,i+1);},async);};if($.isArray(script)){registry[module].state='loading';nestedAddScript(script,markModuleReady,registry[module].async,0);}else if($.isFunction(script)){script($);markModuleReady();}}catch(e){if(window.console&&typeof window.console.log==='function'){console.log('mw.loader::execute> Exception thrown by '+module+': '+e.message);}registry[module].state='error';}}function request(dependencies,ready,error,async){var regItemDeps,regItemDepLen,n;if(typeof dependencies==='string'){dependencies=[dependencies];if(registry[dependencies[0]]!==undefined){regItemDeps=registry[dependencies[0]].dependencies;
+regItemDepLen=regItemDeps.length;for(n=0;n<regItemDepLen;n+=1){dependencies[dependencies.length]=regItemDeps[n];}}}if(arguments.length>1){jobs[jobs.length]={'dependencies':filter(['registered','loading','loaded'],dependencies),'ready':ready,'error':error};}dependencies=filter(['registered'],dependencies);for(n=0;n<dependencies.length;n+=1){if($.inArray(dependencies[n],queue)===-1){queue[queue.length]=dependencies[n];if(async){registry[dependencies[n]].async=true;}}}mw.loader.work();}function sortQuery(o){var sorted={},key,a=[];for(key in o){if(hasOwn.call(o,key)){a.push(key);}}a.sort();for(key=0;key<a.length;key+=1){sorted[a[key]]=o[a[key]];}return sorted;}function buildModulesString(moduleMap){var arr=[],p,prefix;for(prefix in moduleMap){p=prefix===''?'':prefix+'.';arr.push(p+moduleMap[prefix].join(','));}return arr.join('|');}function doRequest(moduleMap,currReqBase,sourceLoadScript,async){var request=$.extend({'modules':buildModulesString(moduleMap)},currReqBase);request=sortQuery(
+request);addScript(sourceLoadScript+'?'+$.param(request)+'&*',null,async);}return{work:function(){var reqBase,splits,maxQueryLength,q,b,bSource,bGroup,bSourceGroup,source,group,g,i,modules,maxVersion,sourceLoadScript,currReqBase,currReqBaseLength,moduleMap,l,lastDotIndex,prefix,suffix,bytesAdded,async;reqBase={skin:mw.config.get('skin'),lang:mw.config.get('wgUserLanguage'),debug:mw.config.get('debug')};splits={};maxQueryLength=mw.config.get('wgResourceLoaderMaxQueryLength',-1);for(q=0;q<queue.length;q+=1){if(registry[queue[q]]!==undefined&&registry[queue[q]].state==='registered'){if($.inArray(queue[q],batch)===-1){batch[batch.length]=queue[q];registry[queue[q]].state='loading';}}}if(!batch.length){return;}queue=[];batch.sort();for(b=0;b<batch.length;b+=1){bSource=registry[batch[b]].source;bGroup=registry[batch[b]].group;if(splits[bSource]===undefined){splits[bSource]={};}if(splits[bSource][bGroup]===undefined){splits[bSource][bGroup]=[];}bSourceGroup=splits[bSource][bGroup];
+bSourceGroup[bSourceGroup.length]=batch[b];}batch=[];for(source in splits){sourceLoadScript=sources[source].loadScript;for(group in splits[source]){modules=splits[source][group];maxVersion=0;for(g=0;g<modules.length;g+=1){if(registry[modules[g]].version>maxVersion){maxVersion=registry[modules[g]].version;}}currReqBase=$.extend({'version':formatVersionNumber(maxVersion)},reqBase);currReqBaseLength=$.param(currReqBase).length;async=true;l=currReqBaseLength+9;moduleMap={};for(i=0;i<modules.length;i+=1){lastDotIndex=modules[i].lastIndexOf('.');prefix=modules[i].substr(0,lastDotIndex);suffix=modules[i].substr(lastDotIndex+1);bytesAdded=moduleMap[prefix]!==undefined?suffix.length+3:modules[i].length+3;if(maxQueryLength>0&&!$.isEmptyObject(moduleMap)&&l+bytesAdded>maxQueryLength){doRequest(moduleMap,currReqBase,sourceLoadScript,async);moduleMap={};async=true;l=currReqBaseLength+9;}if(moduleMap[prefix]===undefined){moduleMap[prefix]=[];}moduleMap[prefix].push(suffix);if(!registry[modules[i]].
+async){async=false;}l+=bytesAdded;}if(!$.isEmptyObject(moduleMap)){doRequest(moduleMap,currReqBase,sourceLoadScript,async);}}}},addSource:function(id,props){var source;if(typeof id==='object'){for(source in id){mw.loader.addSource(source,id[source]);}return true;}if(sources[id]!==undefined){throw new Error('source already registered: '+id);}sources[id]=props;return true;},register:function(module,version,dependencies,group,source){var m;if(typeof module==='object'){for(m=0;m<module.length;m+=1){if(typeof module[m]==='string'){mw.loader.register(module[m]);}else if(typeof module[m]==='object'){mw.loader.register.apply(mw.loader,module[m]);}}return;}if(typeof module!=='string'){throw new Error('module must be a string, not a '+typeof module);}if(registry[module]!==undefined){throw new Error('module already registered: '+module);}registry[module]={'version':version!==undefined?parseInt(version,10):0,'dependencies':[],'group':typeof group==='string'?group:null,'source':typeof source===
+'string'?source:'local','state':'registered'};if(typeof dependencies==='string'){registry[module].dependencies=[dependencies];}else if(typeof dependencies==='object'||$.isFunction(dependencies)){registry[module].dependencies=dependencies;}},implement:function(module,script,style,msgs){if(typeof module!=='string'){throw new Error('module must be a string, not a '+typeof module);}if(!$.isFunction(script)&&!$.isArray(script)){throw new Error('script must be a function or an array, not a '+typeof script);}if(!$.isPlainObject(style)){throw new Error('style must be an object, not a '+typeof style);}if(!$.isPlainObject(msgs)){throw new Error('msgs must be an object, not a '+typeof msgs);}if(registry[module]===undefined){mw.loader.register(module);}if(registry[module]!==undefined&&registry[module].script!==undefined){throw new Error('module already implemented: '+module);}registry[module].state='loaded';registry[module].script=script;registry[module].style=style;registry[module].messages=msgs;
+if(compare(filter(['ready'],registry[module].dependencies),registry[module].dependencies)){execute(module);}},using:function(dependencies,ready,error){var tod=typeof dependencies;if(tod!=='object'&&tod!=='string'){throw new Error('dependencies must be a string or an array, not a '+tod);}if(tod==='string'){dependencies=[dependencies];}dependencies=resolve(dependencies);if(compare(filter(['ready'],dependencies),dependencies)){if($.isFunction(ready)){ready();}}else if(filter(['error'],dependencies).length){if($.isFunction(error)){error(new Error('one or more dependencies have state "error"'),dependencies);}}else{request(dependencies,ready,error);}},load:function(modules,type,async){var filtered,m;if(typeof modules!=='object'&&typeof modules!=='string'){throw new Error('modules must be a string or an array, not a '+typeof modules);}if(typeof modules==='string'){if(/^(https?:)?\/\//.test(modules)){if(async===undefined){async=true;}if(type==='text/css'){$('head').append($('<link>',{rel:
+'stylesheet',type:'text/css',href:modules}));return;}else if(type==='text/javascript'||type===undefined){addScript(modules,null,async);return;}throw new Error('invalid type for external url, must be text/css or text/javascript. not '+type);}modules=[modules];}for(filtered=[],m=0;m<modules.length;m+=1){if(registry[modules[m]]!==undefined){filtered[filtered.length]=modules[m];}}filtered=resolve(filtered);if(compare(filter(['ready'],filtered),filtered)){return;}else if(filter(['error'],filtered).length){return;}else{request(filtered,null,null,async);return;}},state:function(module,state){var m;if(typeof module==='object'){for(m in module){mw.loader.state(m,module[m]);}return;}if(registry[module]===undefined){mw.loader.register(module);}registry[module].state=state;},getVersion:function(module){if(registry[module]!==undefined&&registry[module].version!==undefined){return formatVersionNumber(registry[module].version);}return null;},version:function(){return mw.loader.getVersion.apply(mw.
+loader,arguments);},getState:function(module){if(registry[module]!==undefined&&registry[module].state!==undefined){return registry[module].state;}return null;},getModuleNames:function(){return $.map(registry,function(i,key){return key;});},go:function(){mw.loader.load('mediawiki.user');}};}()),html:(function(){function escapeCallback(s){switch(s){case"'":return'&#039;';case'"':return'&quot;';case'<':return'&lt;';case'>':return'&gt;';case'&':return'&amp;';}}return{escape:function(s){return s.replace(/['"<>&]/g,escapeCallback);},Raw:function(value){this.value=value;},Cdata:function(value){this.value=value;},element:function(name,attrs,contents){var v,attrName,s='<'+name;for(attrName in attrs){v=attrs[attrName];if(v===true){v=attrName;}else if(v===false){continue;}s+=' '+attrName+'="'+this.escape(String(v))+'"';}if(contents===undefined||contents===null){s+='/>';return s;}s+='>';switch(typeof contents){case'string':s+=this.escape(contents);break;case'number':case'boolean':s+=String(
+contents);break;default:if(contents instanceof this.Raw){s+=contents.value;}else if(contents instanceof this.Cdata){if(/<\/[a-zA-z]/.test(contents.value)){throw new Error('mw.html.element: Illegal end tag found in CDATA');}s+=contents.value;}else{throw new Error('mw.html.element: Invalid type of contents');}}s+='</'+name+'>';return s;}};})(),user:{options:new Map(),tokens:new Map()}};})(jQuery);window.$j=jQuery;window.mw=window.mediaWiki=mw;if(typeof startUp!=='undefined'&&jQuery.isFunction(startUp)){startUp();startUp=undefined;};mw.loader.state({"jquery":"ready","mediawiki":"ready"});
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:8f87392541be422f5616ba0b0d90b5dd */
Index: s10k/Vago/help/XMLSNDD_files/load(4).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(4).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(4).php	(revision 1092)
@@ -0,0 +1,32 @@
+mw.loader.implement("jquery.client",function($){(function($){var profileCache={};$.client={profile:function(nav){if(nav===undefined){nav=window.navigator;}if(profileCache[nav.userAgent]===undefined){var uk='unknown';var x='x';var wildUserAgents=['Opera','Navigator','Minefield','KHTML','Chrome','PLAYSTATION 3'];var userAgentTranslations=[[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/,''],['Chrome Safari','Chrome'],['KHTML','Konqueror'],['Minefield','Firefox'],['Navigator','Netscape'],['PLAYSTATION 3','PS3']];var versionPrefixes=['camino','chrome','firefox','netscape','netscape6','opera','version','konqueror','lynx','msie','safari','ps3'];var versionSuffix='(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)';var names=['camino','chrome','firefox','netscape','konqueror','lynx','msie','opera','safari','ipod','iphone','blackberry','ps3'];var nameTranslations=[];var layouts=['gecko','konqueror','msie','opera','webkit'];var layoutTranslations=[['konqueror','khtml'],['msie','trident'],[
+'opera','presto']];var layoutVersions=['applewebkit','gecko'];var platforms=['win','mac','linux','sunos','solaris','iphone'];var platformTranslations=[['sunos','solaris']];var translate=function(source,translations){for(var i=0;i<translations.length;i++){source=source.replace(translations[i][0],translations[i][1]);}return source;};var ua=nav.userAgent,match,name=uk,layout=uk,layoutversion=uk,platform=uk,version=x;if(match=new RegExp('('+wildUserAgents.join('|')+')').exec(ua)){ua=translate(ua,userAgentTranslations);}ua=ua.toLowerCase();if(match=new RegExp('('+names.join('|')+')').exec(ua)){name=translate(match[1],nameTranslations);}if(match=new RegExp('('+layouts.join('|')+')').exec(ua)){layout=translate(match[1],layoutTranslations);}if(match=new RegExp('('+layoutVersions.join('|')+')\\\/(\\d+)').exec(ua)){layoutversion=parseInt(match[2],10);}if(match=new RegExp('('+platforms.join('|')+')').exec(nav.platform.toLowerCase())){platform=translate(match[1],platformTranslations);}if(match=new
+RegExp('('+versionPrefixes.join('|')+')'+versionSuffix).exec(ua)){version=match[3];}if(name.match(/safari/)&&version>400){version='2.0';}if(name==='opera'&&version>=9.8){version=ua.match(/version\/([0-9\.]*)/i)[1]||10;}var versionNumber=parseFloat(version,10)||0.0;profileCache[nav.userAgent]={'name':name,'layout':layout,'layoutVersion':layoutversion,'platform':platform,'version':version,'versionBase':(version!==x?Math.floor(versionNumber).toString():x),'versionNumber':versionNumber};}return profileCache[nav.userAgent];},test:function(map,profile){profile=$.isPlainObject(profile)?profile:$.client.profile();var dir=$('body').is('.rtl')?'rtl':'ltr';if(typeof map[dir]!=='object'||typeof map[dir][profile.name]==='undefined'){return true;}var conditions=map[dir][profile.name];for(var i=0;i<conditions.length;i++){var op=conditions[i][0];var val=conditions[i][1];if(val===false){return false;}else if(typeof val=='string'){if(!(eval('profile.version'+op+'"'+val+'"'))){return false;}}else if(
+typeof val=='number'){if(!(eval('profile.versionNumber'+op+val))){return false;}}}return true;}};})(jQuery);;},{},{});mw.loader.implement("jquery.cookie",function($){jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(
+cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};;},{},{});mw.loader.implement("jquery.messageBox",function($){(function($){$.messageBoxNew=function(options){options=$.extend({'id':'js-messagebox','parent':'body','insert':'prepend'},options);var $curBox=$('#'+options.id);if($curBox.length>0){if($curBox.hasClass('js-messagebox')){return $curBox;}else{return $curBox.addClass('js-messagebox');}}else{var $newBox=$('<div>',{'id':options.id,'class':'js-messagebox','css':{'display':'none'}});if($(options.parent).length<1){options.parent='body';}if(options.insert==='append'){$newBox.appendTo(options.parent);return $newBox;}else{$newBox.prependTo(options.parent);return $newBox;}}};$.messageBox=function(options){options=$.extend({'message':'','group':'default','replace':false,'target':'js-messagebox'},options);var $target=$.messageBoxNew({id:options.target});var groupID=options.target+'-'+
+options.group;var $group=$('#'+groupID);if($group.length<1){$group=$('<div>',{'id':groupID,'class':'js-messagebox-group'});$target.prepend($group);}if(options.replace===true){$group.empty();}if(options.message===''||options.message===null){$group.hide();}else{$group.prepend($('<p>').append(options.message)).show();$target.slideDown();}if($target.find('> *:visible').length===0){$group.show();$target.slideUp();$group.hide();}else{$target.slideDown();}return $group;};})(jQuery);;},{"all":".js-messagebox{margin:1em 5%;padding:0.5em 2.5%;border:1px solid #ccc;background-color:#fcfcfc;font-size:0.8em}.js-messagebox .js-messagebox-group{margin:1px;padding:0.5em 2.5%;border-bottom:1px solid #ddd}.js-messagebox .js-messagebox-group:last-child{border-bottom:thin none transparent}\n\n/* cache key: oni_wiki:resourceloader:filter:minify-css:7:8b08bdc91c52a9ffba396dccfb5b473c */\n"},{});mw.loader.implement("jquery.mwExtension",function($){(function($){$.extend({trimLeft:function(str){return str===
+null?'':str.toString().replace(/^\s+/,'');},trimRight:function(str){return str===null?'':str.toString().replace(/\s+$/,'');},ucFirst:function(str){return str.charAt(0).toUpperCase()+str.substr(1);},escapeRE:function(str){return str.replace(/([\\{}()|.?*+\-^$\[\]])/g,"\\$1");},isDomElement:function(el){return!!el&&!!el.nodeType;},isEmpty:function(v){if(v===''||v===0||v==='0'||v===null||v===false||v===undefined){return true;}if(v.length===0){return true;}if(typeof v==='object'){for(var key in v){return false;}return true;}return false;},compareArray:function(arrThis,arrAgainst){if(arrThis.length!=arrAgainst.length){return false;}for(var i=0;i<arrThis.length;i++){if($.isArray(arrThis[i])){if(!$.compareArray(arrThis[i],arrAgainst[i])){return false;}}else if(arrThis[i]!==arrAgainst[i]){return false;}}return true;},compareObject:function(objectA,objectB){if(typeof objectA==typeof objectB){if(typeof objectA=='object'){if(objectA===objectB){return true;}else{var prop;for(prop in objectA){if(
+prop in objectB){var type=typeof objectA[prop];if(type==typeof objectB[prop]){switch(type){case'object':if(!$.compareObject(objectA[prop],objectB[prop])){return false;}break;case'function':if(objectA[prop].toString()!==objectB[prop].toString()){return false;}break;default:if(objectA[prop]!==objectB[prop]){return false;}break;}}else{return false;}}else{return false;}}for(prop in objectB){if(!(prop in objectA)){return false;}}}}}else{return false;}return true;}});})(jQuery);;},{},{});mw.loader.implement("mediawiki.legacy.ajax",function($){window.sajax_debug_mode=false;window.sajax_request_type='GET';window.sajax_debug=function(text){if(!sajax_debug_mode)return false;var e=document.getElementById('sajax_debug');if(!e){e=document.createElement('p');e.className='sajax_debug';e.id='sajax_debug';var b=document.getElementsByTagName('body')[0];if(b.firstChild){b.insertBefore(e,b.firstChild);}else{b.appendChild(e);}}var m=document.createElement('div');m.appendChild(document.createTextNode(text))
+;e.appendChild(m);return true;};window.sajax_init_object=function(){sajax_debug('sajax_init_object() called..');var A;try{A=new XMLHttpRequest();}catch(e){try{A=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{A=new ActiveXObject('Microsoft.XMLHTTP');}catch(oc){A=null;}}}if(!A){sajax_debug('Could not create connection object.');}return A;};window.sajax_do_call=function(func_name,args,target){var i,x,n;var uri;var post_data;uri=mw.util.wikiScript()+'?action=ajax';if(sajax_request_type=='GET'){if(uri.indexOf('?')==-1){uri=uri+'?rs='+encodeURIComponent(func_name);}else{uri=uri+'&rs='+encodeURIComponent(func_name);}for(i=0;i<args.length;i++){uri=uri+'&rsargs[]='+encodeURIComponent(args[i]);}post_data=null;}else{post_data='rs='+encodeURIComponent(func_name);for(i=0;i<args.length;i++){post_data=post_data+'&rsargs[]='+encodeURIComponent(args[i]);}}x=sajax_init_object();if(!x){alert('AJAX not supported');return false;}try{x.open(sajax_request_type,uri,true);}catch(e){if(window.location.
+hostname=='localhost'){alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing.");}throw e;}if(sajax_request_type=='POST'){x.setRequestHeader('Method','POST '+uri+' HTTP/1.1');x.setRequestHeader('Content-Type','application/x-www-form-urlencoded');}x.setRequestHeader('Pragma','cache=yes');x.setRequestHeader('Cache-Control','no-transform');x.onreadystatechange=function(){if(x.readyState!=4){return;}sajax_debug('received ('+x.status+' '+x.statusText+') '+x.responseText);if(typeof(target)=='function'){target(x);}else if(typeof(target)=='object'){if(target.tagName=='INPUT'){if(x.status==200){target.value=x.responseText;}}else{if(x.status==200){target.innerHTML=x.responseText;}else{target.innerHTML='<div class="error">Error: '+x.status+' '+x.statusText+' ('+x.responseText+')</div>';}}}else{alert('bad target for sajax_do_call: not a function or object: '+target);}};sajax_debug(func_name+' uri = '+uri+' / post = '+post_data);x.send(post_data)
+;sajax_debug(func_name+' waiting..');delete x;return true;};window.wfSupportsAjax=function(){var request=sajax_init_object();var supportsAjax=request?true:false;delete request;return supportsAjax;};;},{},{});mw.loader.implement("mediawiki.legacy.wikibits",function($){(function(){window.clientPC=navigator.userAgent.toLowerCase();window.is_gecko=/gecko/.test(clientPC)&&!/khtml|spoofer|netscape\/7\.0/.test(clientPC);window.is_safari=window.is_safari_win=window.webkit_version=window.is_chrome=window.is_chrome_mac=false;window.webkit_match=clientPC.match(/applewebkit\/(\d+)/);if(webkit_match){window.is_safari=clientPC.indexOf('applewebkit')!=-1&&clientPC.indexOf('spoofer')==-1;window.is_safari_win=is_safari&&clientPC.indexOf('windows')!=-1;window.webkit_version=parseInt(webkit_match[1]);window.is_chrome=clientPC.indexOf('chrome')!==-1&&clientPC.indexOf('spoofer')===-1;window.is_chrome_mac=is_chrome&&clientPC.indexOf('mac')!==-1}window.is_ff2=/firefox\/[2-9]|minefield\/3/.test(clientPC);
+window.ff2_bugs=/firefox\/2/.test(clientPC);window.is_ff2_win=is_ff2&&clientPC.indexOf('windows')!=-1;window.is_ff2_x11=is_ff2&&clientPC.indexOf('x11')!=-1;window.is_opera=window.is_opera_preseven=window.is_opera_95=window.opera6_bugs=window.opera7_bugs=window.opera95_bugs=false;if(clientPC.indexOf('opera')!=-1){window.is_opera=true;window.is_opera_preseven=window.opera&&!document.childNodes;window.is_opera_seven=window.opera&&document.childNodes;window.is_opera_95=/opera\/(9\.[5-9]|[1-9][0-9])/.test(clientPC);window.opera6_bugs=is_opera_preseven;window.opera7_bugs=is_opera_seven&&!is_opera_95;window.opera95_bugs=/opera\/(9\.5)/.test(clientPC);}window.ie6_bugs=false;if(/msie ([0-9]{1,}[\.0-9]{0,})/.exec(clientPC)!=null&&parseFloat(RegExp.$1)<=6.0){ie6_bugs=true;}window.doneOnloadHook=undefined;if(!window.onloadFuncts){window.onloadFuncts=[];}window.addOnloadHook=function(hookFunct){if(!doneOnloadHook){onloadFuncts[onloadFuncts.length]=hookFunct;}else{hookFunct();}};window.importScript=
+function(page){var uri=mw.config.get('wgScript')+'?title='+mw.util.wikiUrlencode(page)+'&action=raw&ctype=text/javascript';return importScriptURI(uri);};window.loadedScripts={};window.importScriptURI=function(url){if(loadedScripts[url]){return null;}loadedScripts[url]=true;var s=document.createElement('script');s.setAttribute('src',url);s.setAttribute('type','text/javascript');document.getElementsByTagName('head')[0].appendChild(s);return s;};window.importStylesheet=function(page){return importStylesheetURI(mw.config.get('wgScript')+'?action=raw&ctype=text/css&title='+mw.util.wikiUrlencode(page));};window.importStylesheetURI=function(url,media){var l=document.createElement('link');l.type='text/css';l.rel='stylesheet';l.href=url;if(media){l.media=media;}document.getElementsByTagName('head')[0].appendChild(l);return l;};window.appendCSS=function(text){var s=document.createElement('style');s.type='text/css';s.rel='stylesheet';if(s.styleSheet){s.styleSheet.cssText=text;}else{s.appendChild(
+document.createTextNode(text+''));}document.getElementsByTagName('head')[0].appendChild(s);return s;};var skinpath=mw.config.get('stylepath')+'/'+mw.config.get('skin');if(mw.config.get('skin')==='monobook'){if(opera6_bugs){importStylesheetURI(skinpath+'/Opera6Fixes.css');}else if(opera7_bugs){importStylesheetURI(skinpath+'/Opera7Fixes.css');}else if(opera95_bugs){importStylesheetURI(skinpath+'/Opera9Fixes.css');}else if(ff2_bugs){importStylesheetURI(skinpath+'/FF2Fixes.css');}}if(mw.config.get('wgBreakFrames')){if(window.top!=window){window.top.location=window.location;}}window.changeText=function(el,newText){if(el.innerText){el.innerText=newText;}else if(el.firstChild&&el.firstChild.nodeValue){el.firstChild.nodeValue=newText;}};window.killEvt=function(evt){evt=evt||window.event||window.Event;if(typeof(evt.preventDefault)!='undefined'){evt.preventDefault();evt.stopPropagation();}else{evt.cancelBubble=true;}return false;};window.mwEditButtons=[];window.mwCustomEditButtons=[];window.
+escapeQuotes=function(text){var re=new RegExp("'","g");text=text.replace(re,"\\'");re=new RegExp("\\n","g");text=text.replace(re,"\\n");return escapeQuotesHTML(text);};window.escapeQuotesHTML=function(text){var re=new RegExp('&',"g");text=text.replace(re,"&amp;");re=new RegExp('"',"g");text=text.replace(re,"&quot;");re=new RegExp('<',"g");text=text.replace(re,"&lt;");re=new RegExp('>',"g");text=text.replace(re,"&gt;");return text;};window.tooltipAccessKeyPrefix='alt-';if(is_opera){tooltipAccessKeyPrefix='shift-esc-';}else if(is_chrome){tooltipAccessKeyPrefix=is_chrome_mac?'ctrl-option-':'alt-';}else if(!is_safari_win&&is_safari&&webkit_version>526){tooltipAccessKeyPrefix='ctrl-alt-';}else if(!is_safari_win&&(is_safari||clientPC.indexOf('mac')!=-1||clientPC.indexOf('konqueror')!=-1)){tooltipAccessKeyPrefix='ctrl-';}else if(is_ff2){tooltipAccessKeyPrefix='alt-shift-';}window.tooltipAccessKeyRegexp=/\[(ctrl-)?(alt-)?(shift-)?(esc-)?(.)\]$/;window.updateTooltipAccessKeys=function(nodeList)
+{if(!nodeList){var linkContainers=['column-one','mw-head','mw-panel','p-logo'];for(var i in linkContainers){var linkContainer=document.getElementById(linkContainers[i]);if(linkContainer){updateTooltipAccessKeys(linkContainer.getElementsByTagName('a'));}}updateTooltipAccessKeys(document.getElementsByTagName('input'));updateTooltipAccessKeys(document.getElementsByTagName('label'));return;}for(var i=0;i<nodeList.length;i++){var element=nodeList[i];var tip=element.getAttribute('title');if(tip&&tooltipAccessKeyRegexp.exec(tip)){tip=tip.replace(tooltipAccessKeyRegexp,'['+tooltipAccessKeyPrefix+"$5]");element.setAttribute('title',tip);}}};window.addPortletLink=function(portlet,href,text,id,tooltip,accesskey,nextnode){var root=document.getElementById(portlet);if(!root){return null;}var uls=root.getElementsByTagName('ul');var node;if(uls.length>0){node=uls[0];}else{node=document.createElement('ul');var lastElementChild=null;for(var i=0;i<root.childNodes.length;++i){if(root.childNodes[i].
+nodeType==1){lastElementChild=root.childNodes[i];}}if(lastElementChild&&lastElementChild.nodeName.match(/div/i)){lastElementChild.appendChild(node);}else{root.appendChild(node);}}if(!node){return null;}root.className=root.className.replace(/(^| )emptyPortlet( |$)/,"$2");var link=document.createElement('a');link.appendChild(document.createTextNode(text));link.href=href;var span=document.createElement('span');span.appendChild(link);var item=document.createElement('li');item.appendChild(span);if(id){item.id=id;}if(accesskey){link.setAttribute('accesskey',accesskey);tooltip+=' ['+accesskey+']';}if(tooltip){link.setAttribute('title',tooltip);}if(accesskey&&tooltip){updateTooltipAccessKeys([link]);}if(nextnode&&nextnode.parentNode==node){node.insertBefore(item,nextnode);}else{node.appendChild(item);}return item;};window.getInnerText=function(el){if(typeof el=='string'){return el;}if(typeof el=='undefined'){return el;}if(el.nodeType&&el.getAttribute('data-sort-value')!==null){return el.
+getAttribute('data-sort-value');}if(el.textContent){return el.textContent;}if(el.innerText){return el.innerText;}var str='';var cs=el.childNodes;var l=cs.length;for(var i=0;i<l;i++){switch(cs[i].nodeType){case 1:str+=getInnerText(cs[i]);break;case 3:str+=cs[i].nodeValue;break;}}return str;};window.checkboxes=undefined;window.lastCheckbox=undefined;window.setupCheckboxShiftClick=function(){checkboxes=[];lastCheckbox=null;var inputs=document.getElementsByTagName('input');addCheckboxClickHandlers(inputs);};window.addCheckboxClickHandlers=function(inputs,start){if(!start){start=0;}var finish=start+250;if(finish>inputs.length){finish=inputs.length;}for(var i=start;i<finish;i++){var cb=inputs[i];if(!cb.type||cb.type.toLowerCase()!='checkbox'||(' '+cb.className+' ').indexOf(' noshiftselect ')!=-1){continue;}var end=checkboxes.length;checkboxes[end]=cb;cb.index=end;addClickHandler(cb,checkboxClickHandler);}if(finish<inputs.length){setTimeout(function(){addCheckboxClickHandlers(inputs,finish);}
+,200);}};window.checkboxClickHandler=function(e){if(typeof e=='undefined'){e=window.event;}if(!e.shiftKey||lastCheckbox===null){lastCheckbox=this.index;return true;}var endState=this.checked;var start,finish;if(this.index<lastCheckbox){start=this.index+1;finish=lastCheckbox;}else{start=lastCheckbox;finish=this.index-1;}for(var i=start;i<=finish;++i){checkboxes[i].checked=endState;if(i>start&&typeof checkboxes[i].onchange=='function'){checkboxes[i].onchange();}}lastCheckbox=this.index;return true;};window.getElementsByClassName=function(oElm,strTagName,oClassNames){var arrReturnElements=[];if(typeof(oElm.getElementsByClassName)=='function'){var arrNativeReturn=oElm.getElementsByClassName(oClassNames);if(strTagName=='*'){return arrNativeReturn;}for(var h=0;h<arrNativeReturn.length;h++){if(arrNativeReturn[h].tagName.toLowerCase()==strTagName.toLowerCase()){arrReturnElements[arrReturnElements.length]=arrNativeReturn[h];}}return arrReturnElements;}var arrElements=(strTagName=='*'&&oElm.all)
+?oElm.all:oElm.getElementsByTagName(strTagName);var arrRegExpClassNames=[];if(typeof oClassNames=='object'){for(var i=0;i<oClassNames.length;i++){arrRegExpClassNames[arrRegExpClassNames.length]=new RegExp("(^|\\s)"+oClassNames[i].replace(/\-/g,"\\-")+"(\\s|$)");}}else{arrRegExpClassNames[arrRegExpClassNames.length]=new RegExp("(^|\\s)"+oClassNames.replace(/\-/g,"\\-")+"(\\s|$)");}var oElement;var bMatchesAll;for(var j=0;j<arrElements.length;j++){oElement=arrElements[j];bMatchesAll=true;for(var k=0;k<arrRegExpClassNames.length;k++){if(!arrRegExpClassNames[k].test(oElement.className)){bMatchesAll=false;break;}}if(bMatchesAll){arrReturnElements[arrReturnElements.length]=oElement;}}return(arrReturnElements);};window.redirectToFragment=function(fragment){var match=navigator.userAgent.match(/AppleWebKit\/(\d+)/);if(match){var webKitVersion=parseInt(match[1]);if(webKitVersion<420){return;}}if(window.location.hash==''){window.location.hash=fragment;if(is_gecko){addOnloadHook(function(){if(
+window.location.hash==fragment){window.location.hash=fragment;}});}}};window.jsMsg=function(message,className){if(!document.getElementById){return false;}var messageDiv=document.getElementById('mw-js-message');if(!messageDiv){messageDiv=document.createElement('div');if(document.getElementById('column-content')&&document.getElementById('content')){document.getElementById('content').insertBefore(messageDiv,document.getElementById('content').firstChild);}else if(document.getElementById('content')&&document.getElementById('article')){document.getElementById('article').insertBefore(messageDiv,document.getElementById('article').firstChild);}else{return false;}}messageDiv.setAttribute('id','mw-js-message');messageDiv.style.display='block';if(className){messageDiv.setAttribute('class','mw-js-message-'+className);}if(typeof message==='object'){while(messageDiv.hasChildNodes()){messageDiv.removeChild(messageDiv.firstChild);}messageDiv.appendChild(message);}else{messageDiv.innerHTML=message;}
+return true;};window.injectSpinner=function(element,id){var spinner=document.createElement('img');spinner.id='mw-spinner-'+id;spinner.src=mw.config.get('stylepath')+'/common/images/spinner.gif';spinner.alt=spinner.title='...';if(element.nextSibling){element.parentNode.insertBefore(spinner,element.nextSibling);}else{element.parentNode.appendChild(spinner);}};window.removeSpinner=function(id){var spinner=document.getElementById('mw-spinner-'+id);if(spinner){spinner.parentNode.removeChild(spinner);}};window.runOnloadHook=function(){if(doneOnloadHook||!(document.getElementById&&document.getElementsByTagName)){return;}doneOnloadHook=true;for(var i=0;i<onloadFuncts.length;i++){onloadFuncts[i]();}};window.addHandler=function(element,attach,handler){if(element.addEventListener){element.addEventListener(attach,handler,false);}else if(element.attachEvent){element.attachEvent('on'+attach,handler);}};window.hookEvent=function(hookName,hookFunct){addHandler(window,hookName,hookFunct);};window.
+addClickHandler=function(element,handler){addHandler(element,'click',handler);};window.removeHandler=function(element,remove,handler){if(window.removeEventListener){element.removeEventListener(remove,handler,false);}else if(window.detachEvent){element.detachEvent('on'+remove,handler);}};hookEvent('load',runOnloadHook);if(ie6_bugs){importScriptURI(mw.config.get('stylepath')+'/common/IEFixes.js');}})();;},{},{});mw.loader.implement("mediawiki.page.startup",function($){(function($){mw.page={};$('html').addClass('client-js').removeClass('client-nojs');$(mw.util.init);})(jQuery);;},{},{});mw.loader.implement("mediawiki.util",function($){(function($,mw){"use strict";var util={init:function(){var profile,$tocTitle,$tocToggleLink,hideTocCookie;$.messageBoxNew({id:'mw-js-message',parent:'#content'});profile=$.client.profile();if(profile.name==='opera'){util.tooltipAccessKeyPrefix='shift-esc-';}else if(profile.name==='chrome'){util.tooltipAccessKeyPrefix=(profile.platform==='mac'?'ctrl-option-':
+profile.platform==='win'?'alt-shift-':'alt-');}else if(profile.platform!=='win'&&profile.name==='safari'&&profile.layoutVersion>526){util.tooltipAccessKeyPrefix='ctrl-alt-';}else if(!(profile.platform==='win'&&profile.name==='safari')&&(profile.name==='safari'||profile.platform==='mac'||profile.name==='konqueror')){util.tooltipAccessKeyPrefix='ctrl-';}else if(profile.name==='firefox'&&profile.versionBase>'1'){util.tooltipAccessKeyPrefix='alt-shift-';}if($('#bodyContent').length){util.$content=$('#bodyContent');}else if($('#mw_contentholder').length){util.$content=$('#mw_contentholder');}else if($('#article').length){util.$content=$('#article');}else{util.$content=$('#content');}$tocTitle=$('#toctitle');$tocToggleLink=$('#togglelink');if($('#toc').length&&$tocTitle.length&&!$tocToggleLink.length){hideTocCookie=$.cookie('mw_hidetoc');$tocToggleLink=$('<a href="#" class="internal" id="togglelink"></a>').text(mw.msg('hidetoc')).click(function(e){e.preventDefault();util.toggleToc($(this));}
+);$tocTitle.append($tocToggleLink.wrap('<span class="toctoggle"></span>').parent().prepend('&nbsp;[').append(']&nbsp;'));if(hideTocCookie==='1'){util.toggleToc($tocToggleLink);}}},rawurlencode:function(str){str=String(str);return encodeURIComponent(str).replace(/!/g,'%21').replace(/'/g,'%27').replace(/\(/g,'%28').replace(/\)/g,'%29').replace(/\*/g,'%2A').replace(/~/g,'%7E');},wikiUrlencode:function(str){return util.rawurlencode(str).replace(/%20/g,'_').replace(/%3A/g,':').replace(/%2F/g,'/');},wikiGetlink:function(str){return mw.config.get('wgArticlePath').replace('$1',util.wikiUrlencode(typeof str==='string'?str:mw.config.get('wgPageName')));},wikiScript:function(str){return mw.config.get('wgScriptPath')+'/'+(str||'index')+mw.config.get('wgScriptExtension');},addCSS:function(text){var s=document.createElement('style');s.type='text/css';s.rel='stylesheet';document.getElementsByTagName('head')[0].appendChild(s);if(s.styleSheet){s.styleSheet.cssText=text;}else{s.appendChild(document.
+createTextNode(String(text)));}return s.sheet||s;},toggleToc:function($toggleLink,callback){var $tocList=$('#toc ul:first');if($tocList.length){if($tocList.is(':hidden')){$tocList.slideDown('fast',callback);$toggleLink.text(mw.msg('hidetoc'));$('#toc').removeClass('tochidden');$.cookie('mw_hidetoc',null,{expires:30,path:'/'});return true;}else{$tocList.slideUp('fast',callback);$toggleLink.text(mw.msg('showtoc'));$('#toc').addClass('tochidden');$.cookie('mw_hidetoc','1',{expires:30,path:'/'});return false;}}else{return null;}},getParamValue:function(param,url){url=url||document.location.href;var re=new RegExp('^[^#]*[&?]'+$.escapeRE(param)+'=([^&#]*)'),m=re.exec(url);if(m&&m.length>1){return decodeURIComponent(m[1].replace(/\+/g,'%20'));}return null;},tooltipAccessKeyPrefix:'alt-',tooltipAccessKeyRegexp:/\[(ctrl-)?(alt-)?(shift-)?(esc-)?(.)\]$/,updateTooltipAccessKeys:function($nodes){if(!$nodes){$nodes=$('#column-one a, #mw-head a, #mw-panel a, #p-logo a, input, label');}else if(!(
+$nodes instanceof $)){$nodes=$($nodes);}$nodes.attr('title',function(i,val){if(val&&util.tooltipAccessKeyRegexp.exec(val)){return val.replace(util.tooltipAccessKeyRegexp,'['+util.tooltipAccessKeyPrefix+'$5]');}return val;});},$content:null,addPortletLink:function(portlet,href,text,id,tooltip,accesskey,nextnode){var $item,$link,$portlet,$ul;if(arguments.length<3){return null;}$link=$('<a>').attr('href',href).text(text);if(tooltip){$link.attr('title',tooltip);}switch(mw.config.get('skin')){case'standard':case'cologneblue':$('#quickbar').append($link.after('<br/>'));return $link[0];case'nostalgia':$('#searchform').before($link).before(' &#124; ');return $link[0];default:$portlet=$('#'+portlet);if($portlet.length===0){return null;}$ul=$portlet.find('ul');if($ul.length===0){if($portlet.find('div:first').length===0){$portlet.append('<ul></ul>');}else{$portlet.find('div').eq(-1).append('<ul></ul>');}$ul=$portlet.find('ul').eq(0);}if($ul.length===0){return null;}$portlet.removeClass(
+'emptyPortlet');if($portlet.hasClass('vectorTabs')){$item=$link.wrap('<li><span></span></li>').parent().parent();}else{$item=$link.wrap('<li></li>').parent();}if(id){$item.attr('id',id);}if(accesskey){$link.attr('accesskey',accesskey);tooltip+=' ['+accesskey+']';$link.attr('title',tooltip);}if(accesskey&&tooltip){util.updateTooltipAccessKeys($link);}if(nextnode&&nextnode.parentNode===$ul[0]){$(nextnode).before($item);}else if(typeof nextnode==='string'&&$ul.find(nextnode).length!==0){$ul.find(nextnode).eq(0).before($item);}else{$ul.append($item);}return $item[0];}},jsMessage:function(message,className){if(!arguments.length||message===''||message===null){$('#mw-js-message').empty().hide();return true;}else{var $messageDiv=$('#mw-js-message');if(!$messageDiv.length){$messageDiv=$('<div id="mw-js-message"></div>');if(util.$content.parent().length){util.$content.parent().prepend($messageDiv);}else{return false;}}if(className){$messageDiv.prop('class','mw-js-message-'+className);}if(typeof
+message==='object'){$messageDiv.empty();$messageDiv.append(message);}else{$messageDiv.html(message);}$messageDiv.slideDown();return true;}},validateEmail:function(mailtxt){var rfc5322_atext,rfc1034_ldh_str,HTML5_email_regexp;if(mailtxt===''){return null;}rfc5322_atext="a-z0-9!#$%&'*+\\-/=?^_`{|}~";rfc1034_ldh_str="a-z0-9\\-";HTML5_email_regexp=new RegExp('^'+'['+rfc5322_atext+'\\.]+'+'@'+'['+rfc1034_ldh_str+']+'+'(?:\\.['+rfc1034_ldh_str+']+)*'+'$','i');return(null!==mailtxt.match(HTML5_email_regexp));},isIPv4Address:function(address,allowBlock){if(typeof address!=='string'){return false;}var block=allowBlock?'(?:\\/(?:3[0-2]|[12]?\\d))?':'',RE_IP_BYTE='(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])',RE_IP_ADD='(?:'+RE_IP_BYTE+'\\.){3}'+RE_IP_BYTE;return address.search(new RegExp('^'+RE_IP_ADD+block+'$'))!==-1;},isIPv6Address:function(address,allowBlock){if(typeof address!=='string'){return false;}var block=allowBlock?'(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?\\d))?':'',RE_IPV6_ADD='(?:'+
+':(?::|(?::'+'[0-9A-Fa-f]{1,4}'+'){1,7})'+'|'+'[0-9A-Fa-f]{1,4}'+'(?::'+'[0-9A-Fa-f]{1,4}'+'){0,6}::'+'|'+'[0-9A-Fa-f]{1,4}'+'(?::'+'[0-9A-Fa-f]{1,4}'+'){7}'+')';if(address.search(new RegExp('^'+RE_IPV6_ADD+block+'$'))!==-1){return true;}RE_IPV6_ADD='[0-9A-Fa-f]{1,4}'+'(?:::?'+'[0-9A-Fa-f]{1,4}'+'){1,6}';return address.search(new RegExp('^'+RE_IPV6_ADD+block+'$'))!==-1&&address.search(/::/)!==-1&&address.search(/::.*::/)===-1;}};mw.util=util;})(jQuery,mediaWiki);;},{},{"showtoc":"show","hidetoc":"hide"});
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:1aa4243ba1ca1aec859d6ce378a84443 */
Index: s10k/Vago/help/XMLSNDD_files/load(5).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(5).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(5).php	(revision 1092)
@@ -0,0 +1,3 @@
+jQuery(function($){$('div.vectorMenu').each(function(){var self=this;$('h5:first a:first',this).click(function(e){$('.menu:first',self).toggleClass('menuForceShow');e.preventDefault();}).focus(function(){$(self).addClass('vectorMenuFocus');}).blur(function(){$(self).removeClass('vectorMenuFocus');});});});;mw.loader.state({"skins.vector":"ready"});
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:0fcba82177db6429d02096ea1f0465ed */
Index: s10k/Vago/help/XMLSNDD_files/load(6).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(6).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(6).php	(revision 1092)
@@ -0,0 +1,39 @@
+mw.loader.implement("jquery.checkboxShiftClick",function($){(function($){$.fn.checkboxShiftClick=function(text){var prevCheckbox=null;var $box=this;$box.click(function(e){if(prevCheckbox!==null&&e.shiftKey){$box.slice(Math.min($box.index(prevCheckbox),$box.index(e.target)),Math.max($box.index(prevCheckbox),$box.index(e.target))+1).prop('checked',e.target.checked?true:false);}prevCheckbox=e.target;});return $box;};})(jQuery);;},{},{});mw.loader.implement("jquery.makeCollapsible",function($){(function($,mw){$.fn.makeCollapsible=function(){return this.each(function(){var _fn='jquery.makeCollapsible> ';var $that=$(this).addClass('mw-collapsible'),that=this,collapsetext=$(this).attr('data-collapsetext'),expandtext=$(this).attr('data-expandtext'),toggleElement=function($collapsible,action,$defaultToggle,instantHide){if(!$collapsible.jquery){return;}if(action!='expand'&&action!='collapse'){return;}if(typeof $defaultToggle=='undefined'){$defaultToggle=null;}if($defaultToggle!==null&&!(
+$defaultToggle instanceof $)){return;}var $containers=null;if(action=='collapse'){if($collapsible.is('table')){$containers=$collapsible.find('>tbody>tr');if($defaultToggle){$containers.not($defaultToggle.closest('tr')).stop(true,true).fadeOut();}else{if(instantHide){$containers.hide();}else{$containers.stop(true,true).fadeOut();}}}else if($collapsible.is('ul')||$collapsible.is('ol')){$containers=$collapsible.find('> li');if($defaultToggle){$containers.not($defaultToggle.parent()).stop(true,true).slideUp();}else{if(instantHide){$containers.hide();}else{$containers.stop(true,true).slideUp();}}}else{var $collapsibleContent=$collapsible.find('> .mw-collapsible-content');if($collapsibleContent.length){if(instantHide){$collapsibleContent.hide();}else{$collapsibleContent.slideUp();}}else{if($collapsible.is('tr')||$collapsible.is('td')||$collapsible.is('th')){$collapsible.fadeOut();}else{$collapsible.slideUp();}}}}else{if($collapsible.is('table')){$containers=$collapsible.find('>tbody>tr');if(
+$defaultToggle){$containers.not($defaultToggle.parent().parent()).stop(true,true).fadeIn();}else{$containers.stop(true,true).fadeIn();}}else if($collapsible.is('ul')||$collapsible.is('ol')){$containers=$collapsible.find('> li');if($defaultToggle){$containers.not($defaultToggle.parent()).stop(true,true).slideDown();}else{$containers.stop(true,true).slideDown();}}else{var $collapsibleContent=$collapsible.find('> .mw-collapsible-content');if($collapsibleContent.length){$collapsibleContent.slideDown();}else{if($collapsible.is('tr')||$collapsible.is('td')||$collapsible.is('th')){$collapsible.fadeIn();}else{$collapsible.slideDown();}}}}},toggleLinkDefault=function(that,e){var $that=$(that),$collapsible=$that.closest('.mw-collapsible.mw-made-collapsible').toggleClass('mw-collapsed');e.preventDefault();e.stopPropagation();if(!$that.hasClass('mw-collapsible-toggle-collapsed')){$that.removeClass('mw-collapsible-toggle-expanded').addClass('mw-collapsible-toggle-collapsed');if($that.find('> a').
+length){$that.find('> a').text(expandtext);}else{$that.text(expandtext);}toggleElement($collapsible,'collapse',$that);}else{$that.removeClass('mw-collapsible-toggle-collapsed').addClass('mw-collapsible-toggle-expanded');if($that.find('> a').length){$that.find('> a').text(collapsetext);}else{$that.text(collapsetext);}toggleElement($collapsible,'expand',$that);}return;},toggleLinkPremade=function($that,e){var $collapsible=$that.eq(0).closest('.mw-collapsible.mw-made-collapsible').toggleClass('mw-collapsed');if($(e.target).is('a')){return true;}e.preventDefault();e.stopPropagation();if(!$that.hasClass('mw-collapsible-toggle-collapsed')){$that.removeClass('mw-collapsible-toggle-expanded').addClass('mw-collapsible-toggle-collapsed');toggleElement($collapsible,'collapse',$that);}else{$that.removeClass('mw-collapsible-toggle-collapsed').addClass('mw-collapsible-toggle-expanded');toggleElement($collapsible,'expand',$that);}return;},toggleLinkCustom=function($that,e,$collapsible){if(e){e.
+preventDefault();e.stopPropagation();}var action=$collapsible.hasClass('mw-collapsed')?'expand':'collapse';$collapsible.toggleClass('mw-collapsed');toggleElement($collapsible,action,$that);};if(!collapsetext){collapsetext=mw.msg('collapsible-collapse');}if(!expandtext){expandtext=mw.msg('collapsible-expand');}var $toggleLink=$('<a href="#"></a>').text(collapsetext).wrap('<span class="mw-collapsible-toggle"></span>').parent().prepend('&nbsp;[').append(']&nbsp;').bind('click.mw-collapse',function(e){toggleLinkDefault(this,e);});if($that.hasClass('mw-made-collapsible')){return;}else{$that.addClass('mw-made-collapsible');}if(($that.attr('id')||'').indexOf('mw-customcollapsible-')===0){var thatId=$that.attr('id'),$customTogglers=$('.'+thatId.replace('mw-customcollapsible','mw-customtoggle'));mw.log(_fn+'Found custom collapsible: #'+thatId);if($customTogglers.length){$customTogglers.bind('click.mw-collapse',function(e){toggleLinkCustom($(this),e,$that);});}else{mw.log(_fn+'#'+thatId+
+': Missing toggler!');}if($that.hasClass('mw-collapsed')){$that.removeClass('mw-collapsed');toggleLinkCustom($customTogglers,null,$that);}}else{if($that.is('table')){var $firstRowCells=$('tr:first th, tr:first td',that),$toggle=$firstRowCells.find('> .mw-collapsible-toggle');if(!$toggle.length){$firstRowCells.eq(-1).prepend($toggleLink);}else{$toggleLink=$toggle.unbind('click.mw-collapse').bind('click.mw-collapse',function(e){toggleLinkPremade($toggle,e);});}}else if($that.is('ul')||$that.is('ol')){var $firstItem=$('li:first',$that),$toggle=$firstItem.find('> .mw-collapsible-toggle');if(!$toggle.length){var firstval=$firstItem.attr('value');if(firstval===undefined||!firstval||firstval=='-1'){$firstItem.attr('value','1');}$that.prepend($toggleLink.wrap('<li class="mw-collapsible-toggle-li"></li>').parent());}else{$toggleLink=$toggle.unbind('click.mw-collapse').bind('click.mw-collapse',function(e){toggleLinkPremade($toggle,e);});}}else{var $toggle=$that.find('> .mw-collapsible-toggle');
+if(!$that.find('> .mw-collapsible-content').length){$that.wrapInner('<div class="mw-collapsible-content"></div>');}if(!$toggle.length){$that.prepend($toggleLink);}else{$toggleLink=$toggle.unbind('click.mw-collapse').bind('click.mw-collapse',function(e){toggleLinkPremade($toggle,e);});}}}if($that.hasClass('mw-collapsed')&&($that.attr('id')||'').indexOf('mw-customcollapsible-')!==0){$that.removeClass('mw-collapsed');toggleElement($that,'collapse',$toggleLink.eq(0),true);$toggleLink.eq(0).click();}});};})(jQuery,mediaWiki);;},{"all":".mw-collapsible-toggle{float:right} li .mw-collapsible-toggle{float:none} .mw-collapsible-toggle-li{list-style:none}\n\n/* cache key: oni_wiki:resourceloader:filter:minify-css:7:4250852ed2349a0d4d0fc6509a3e7d4c */\n"},{"collapsible-expand":"Expand","collapsible-collapse":"Collapse"});mw.loader.implement("jquery.mw-jump",function($){jQuery(function($){$('.mw-jump').delegate('a','focus blur',function(e){if(e.type==="blur"||e.type==="focusout"){$(this).closest(
+'.mw-jump').css({height:'0'});}else{$(this).closest('.mw-jump').css({height:'auto'});}});});;},{},{});mw.loader.implement("jquery.placeholder",function($){(function($){$.fn.placeholder=function(){return this.each(function(){if(this.placeholder&&'placeholder'in document.createElement(this.tagName)){return;}var placeholder=this.getAttribute('placeholder');var $input=$(this);if(this.value===''||this.value===placeholder){$input.addClass('placeholder').val(placeholder);}$input.blur(function(){if(this.value===''){this.value=placeholder;$input.addClass('placeholder');}}).bind('focus drop keydown paste',function(e){if($input.hasClass('placeholder')){if(e.type=='drop'&&e.originalEvent.dataTransfer){try{this.value=e.originalEvent.dataTransfer.getData('text/plain');}catch(exception){this.value=e.originalEvent.dataTransfer.getData('text');}e.preventDefault();}else{this.value='';}$input.removeClass('placeholder');}});if(this.form){$(this.form).submit(function(){if($input.hasClass('placeholder')){
+$input.val('').removeClass('placeholder');}});}});};})(jQuery);;},{},{});mw.loader.implement("mediawiki.action.watch.ajax",function($){(function($,mw,undefined){var title=mw.config.get('wgRelevantPageName',mw.config.get('wgPageName'));function updateWatchLink($link,action,state){var msgKey=state==='loading'?action+'ing':action,accesskeyTip=$link.attr('title').match(mw.util.tooltipAccessKeyRegexp),$li=$link.closest('li');$link.text(mw.msg(msgKey)).attr('title',mw.msg('tooltip-ca-'+action)+(accesskeyTip?' '+accesskeyTip[0]:'')).attr('href',mw.util.wikiScript()+'?'+$.param({title:title,action:action}));if($li.hasClass('icon')){if(state==='loading'){$link.addClass('loading');}else{$link.removeClass('loading');}}}function mwUriGetAction(url){var actionPaths=mw.config.get('wgActionPaths'),key,parts,m,action;action=mw.util.getParamValue('action',url);if(action!==null){return action;}for(key in actionPaths){if(actionPaths.hasOwnProperty(key)){parts=actionPaths[key].split('$1');for(i=0;i<parts.
+length;i+=1){parts[i]=$.escapeRE(parts[i]);}m=new RegExp(parts.join('(.+)')).exec(url);if(m&&m[1]){return key;}}}return'view';}$(document).ready(function(){var $links=$('.mw-watchlink a, a.mw-watchlink, '+'#ca-watch a, #ca-unwatch a, #mw-unwatch-link1, '+'#mw-unwatch-link2, #mw-watch-link2, #mw-watch-link1');$links=$links.filter(':not( #bodyContent *, #content * )');$links.click(function(e){var $link,api,action=mwUriGetAction(this.href);if(action!=='watch'&&action!=='unwatch'){return true;}e.preventDefault();e.stopPropagation();$link=$(this);updateWatchLink($link,action,'loading');api=new mw.Api();api[action](title,function(watchResponse){var otherAction=action==='watch'?'unwatch':'watch',$li=$link.closest('li');mw.util.jsMessage(watchResponse.message,'ajaxwatch');updateWatchLink($link,otherAction);if($li.prop('id')==='ca-'+otherAction||$li.prop('id')==='ca-'+action){$li.prop('id','ca-'+otherAction);}if(watchResponse.watched!==undefined){$('#wpWatchthis').prop('checked',true);}else{$(
+'#wpWatchthis').removeProp('checked');}},function(){updateWatchLink($link,action);var cleanTitle=title.replace(/_/g,' ');var link=mw.html.element('a',{'href':mw.util.wikiGetlink(title),'title':cleanTitle},cleanTitle);var html=mw.msg('watcherrortext',link);mw.util.jsMessage(html,'ajaxwatch');});});});})(jQuery,mediaWiki);;},{},{"watch":"Watch","unwatch":"Unwatch","watching":"Watching...","unwatching":"Unwatching...","tooltip-ca-watch":"Add this page to your watchlist","tooltip-ca-unwatch":"Remove this page from your watchlist","watcherrortext":"An error occurred while changing your watchlist settings for \"$1\"."});mw.loader.implement("mediawiki.api",function($){(function($,mw,undefined){var defaultOptions={parameters:{action:'query',format:'json'},ajax:{url:mw.util.wikiScript('api'),ok:function(){},err:function(code,result){mw.log('mw.Api error: '+code,'debug');},timeout:30000,dataType:'json'}};mw.Api=function(options){if(options===undefined){options={};}if(options.ajax&&options.ajax.
+url!==undefined){options.ajax.url=String(options.ajax.url);}options.parameters=$.extend({},defaultOptions.parameters,options.parameters);options.ajax=$.extend({},defaultOptions.ajax,options.ajax);this.defaults=options;};mw.Api.prototype={normalizeAjaxOptions:function(arg){var opt=arg;if(typeof arg==='function'){opt={'ok':arg};}if(!opt.ok){throw new Error('ajax options must include ok callback');}return opt;},get:function(parameters,ajaxOptions){ajaxOptions=this.normalizeAjaxOptions(ajaxOptions);ajaxOptions.type='GET';return this.ajax(parameters,ajaxOptions);},post:function(parameters,ajaxOptions){ajaxOptions=this.normalizeAjaxOptions(ajaxOptions);ajaxOptions.type='POST';return this.ajax(parameters,ajaxOptions);},ajax:function(parameters,ajaxOptions){parameters=$.extend({},this.defaults.parameters,parameters);ajaxOptions=$.extend({},this.defaults.ajax,ajaxOptions);ajaxOptions.data=$.param(parameters).replace(/\./g,'%2E');ajaxOptions.error=function(xhr,textStatus,exception){ajaxOptions.
+err('http',{xhr:xhr,textStatus:textStatus,exception:exception});};ajaxOptions.success=function(result){if(result===undefined||result===null||result===''){ajaxOptions.err('ok-but-empty','OK response but empty result (check HTTP headers?)');}else if(result.error){var code=result.error.code===undefined?'unknown':result.error.code;ajaxOptions.err(code,result);}else{ajaxOptions.ok(result);}};return $.ajax(ajaxOptions);}};mw.Api.errors=['ok-but-empty','timeout','duplicate','duplicate-archive','noimageinfo','uploaddisabled','nomodule','mustbeposted','badaccess-groups','stashfailed','missingresult','missingparam','invalid-file-key','copyuploaddisabled','mustbeloggedin','empty-file','file-too-large','filetype-missing','filetype-banned','filename-tooshort','illegal-filename','verification-error','hookaborted','unknown-error','internal-error','overwrite','badtoken','fetchfileerror','fileexists-shared-forbidden','invalidtitle','notloggedin'];mw.Api.warnings=['duplicate','exists'];})(jQuery,
+mediaWiki);;},{},{});mw.loader.implement("mediawiki.user",function($){(function($){function User(options,tokens){var that=this;this.options=options||new mw.Map();this.tokens=tokens||new mw.Map();function generateId(){var id='';var seed='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';for(var i=0,r;i<32;i++){r=Math.floor(Math.random()*seed.length);id+=seed.substring(r,r+1);}return id;}this.name=function(){return mw.config.get('wgUserName');};this.anonymous=function(){return that.name()?false:true;};this.sessionId=function(){var sessionId=$.cookie('mediaWiki.user.sessionId');if(typeof sessionId=='undefined'||sessionId===null){sessionId=generateId();$.cookie('mediaWiki.user.sessionId',sessionId,{'expires':null,'path':'/'});}return sessionId;};this.id=function(){var name=that.name();if(name){return name;}var id=$.cookie('mediaWiki.user.id');if(typeof id=='undefined'||id===null){id=generateId();}$.cookie('mediaWiki.user.id',id,{'expires':365,'path':'/'});return id;};this.
+bucket=function(key,options){options=$.extend({'buckets':{},'version':0,'tracked':false,'expires':30},options||{});var cookie=$.cookie('mediaWiki.user.bucket:'+key);var bucket=null;var version=0;if(typeof cookie==='string'&&cookie.length>2&&cookie.indexOf(':')>0){var parts=cookie.split(':');if(parts.length>1&&parts[0]==options.version){version=Number(parts[0]);bucket=String(parts[1]);}}if(bucket===null){if(!$.isPlainObject(options.buckets)){throw'Invalid buckets error. Object expected for options.buckets.';}version=Number(options.version);var range=0,k;for(k in options.buckets){range+=options.buckets[k];}var rand=Math.random()*range;var total=0;for(k in options.buckets){bucket=k;total+=options.buckets[k];if(total>=rand){break;}}if(options.tracked){mw.loader.using('jquery.clickTracking',function(){$.trackAction('mediaWiki.user.bucket:'+key+'@'+version+':'+bucket);});}$.cookie('mediaWiki.user.bucket:'+key,version+':'+bucket,{'path':'/','expires':Number(options.expires)});}return bucket;}
+;}mw.user=new User(mw.user.options,mw.user.tokens);})(jQuery);;},{},{});mw.loader.implement("mediawiki.api.watch",function($){(function($,mw){$.extend(mw.Api.prototype,{watch:function(page,success,err){var params,ok;params={action:'watch',title:String(page),token:mw.user.tokens.get('watchToken'),uselang:mw.config.get('wgUserLanguage')};ok=function(data){success(data.watch);};return this.post(params,{ok:ok,err:err});},unwatch:function(page,success,err){var params,ok;params={action:'watch',unwatch:1,title:String(page),token:mw.user.tokens.get('watchToken'),uselang:mw.config.get('wgUserLanguage')};ok=function(data){success(data.watch);};return this.post(params,{ok:ok,err:err});}});})(jQuery,mediaWiki);;},{},{});mw.loader.implement("mediawiki.legacy.mwsuggest",function($){if(!mw.config.exists('wgMWSuggestTemplate')){mw.config.set('wgMWSuggestTemplate',mw.config.get('wgServer')+mw.config.get('wgScriptPath')+
+"/api.php?action=opensearch\x26search={searchTerms}\x26namespace={namespaces}\x26suggest");}window.os_map={};window.os_cache={};window.os_cur_keypressed=0;window.os_keypressed_count=0;window.os_timer=null;window.os_mouse_pressed=false;window.os_mouse_num=-1;window.os_mouse_moved=false;window.os_search_timeout=250;window.os_autoload_inputs=['searchInput','searchInput2','powerSearchText','searchText'];window.os_autoload_forms=['searchform','searchform2','powersearch','search'];window.os_is_stopped=false;window.os_max_lines_per_suggest=7;window.os_animation_steps=6;window.os_animation_min_step=2;window.os_animation_delay=30;window.os_container_max_width=2;window.os_animation_timer=null;window.os_enabled=true;window.os_use_datalist=false;window.os_Timer=function(id,r,query){this.id=id;this.r=r;this.query=query;};window.os_Results=function(name,formname){this.searchform=formname;this.searchbox=name;this.container=name+'Suggest';this.resultTable=name+'Result';this.resultText=name+
+'ResultText';this.toggle=name+'Toggle';this.query=null;this.results=null;this.resultCount=0;this.original=null;this.selected=-1;this.containerCount=0;this.containerRow=0;this.containerTotal=0;this.visible=false;this.stayHidden=false;};window.os_AnimationTimer=function(r,target){this.r=r;var current=document.getElementById(r.container).offsetWidth;this.inc=Math.round((target-current)/os_animation_steps);if(this.inc<os_animation_min_step&&this.inc>=0){this.inc=os_animation_min_step;}if(this.inc>-os_animation_min_step&&this.inc<0){this.inc=-os_animation_min_step;}this.target=target;};window.os_MWSuggestInit=function(){if(!window.os_enabled){return;}for(var i=0;i<os_autoload_inputs.length;i++){var id=os_autoload_inputs[i];var form=os_autoload_forms[i];element=document.getElementById(id);if(element!=null){os_initHandlers(id,form,element);}}};window.os_MWSuggestTeardown=function(){for(var i=0;i<os_autoload_inputs.length;i++){var id=os_autoload_inputs[i];var form=os_autoload_forms[i];element=
+document.getElementById(id);if(element!=null){os_teardownHandlers(id,form,element);}}};window.os_MWSuggestDisable=function(){window.os_MWSuggestTeardown();window.os_enabled=false;}
+window.os_initHandlers=function(name,formname,element){var r=new os_Results(name,formname);var formElement=document.getElementById(formname);if(!formElement){return;}os_hookEvent(element,'keyup',os_eventKeyup);os_hookEvent(element,'keydown',os_eventKeydown);os_hookEvent(element,'keypress',os_eventKeypress);if(!os_use_datalist){os_hookEvent(element,'blur',os_eventBlur);os_hookEvent(element,'focus',os_eventFocus);element.setAttribute('autocomplete','off');}os_hookEvent(formElement,'submit',os_eventOnsubmit);os_map[name]=r;if(document.getElementById(r.toggle)==null){}};window.os_teardownHandlers=function(name,formname,element){var formElement=document.getElementById(formname);if(!formElement){return;}os_unhookEvent(element,'keyup',os_eventKeyup);os_unhookEvent(element,'keydown',os_eventKeydown);os_unhookEvent(element,'keypress',os_eventKeypress);if(!os_use_datalist){os_unhookEvent(element,'blur',os_eventBlur);os_unhookEvent(element,'focus',os_eventFocus);element.removeAttribute(
+'autocomplete');}os_unhookEvent(formElement,'submit',os_eventOnsubmit);};window.os_hookEvent=function(element,hookName,hookFunct){if(element.addEventListener){element.addEventListener(hookName,hookFunct,false);}else if(window.attachEvent){element.attachEvent('on'+hookName,hookFunct);}};window.os_unhookEvent=function(element,hookName,hookFunct){if(element.removeEventListener){element.removeEventListener(hookName,hookFunct,false);}else if(element.detachEvent){element.detachEvent('on'+hookName,hookFunct);}}
+window.os_eventKeyup=function(e){var targ=os_getTarget(e);var r=os_map[targ.id];if(r==null){return;}if(os_keypressed_count==0){os_processKey(r,os_cur_keypressed,targ);}var query=targ.value;os_fetchResults(r,query,os_search_timeout);};window.os_processKey=function(r,keypressed,targ){if(keypressed==40&&!r.visible&&os_timer==null){r.query='';os_fetchResults(r,targ.value,0);}if(os_use_datalist){return;}if(keypressed==40){if(r.visible){os_changeHighlight(r,r.selected,r.selected+1,true);}}else if(keypressed==38){if(r.visible){os_changeHighlight(r,r.selected,r.selected-1,true);}}else if(keypressed==27){document.getElementById(r.searchbox).value=r.original;r.query=r.original;os_hideResults(r);}else if(r.query!=document.getElementById(r.searchbox).value){}};window.os_eventKeypress=function(e){var targ=os_getTarget(e);var r=os_map[targ.id];if(r==null){return;}var keypressed=os_cur_keypressed;os_keypressed_count++;os_processKey(r,keypressed,targ);};window.os_eventKeydown=function(e){if(!e){e=
+window.event;}var targ=os_getTarget(e);var r=os_map[targ.id];if(r==null){return;}os_mouse_moved=false;os_cur_keypressed=(e.keyCode==undefined)?e.which:e.keyCode;os_keypressed_count=0;};window.os_eventOnsubmit=function(e){var targ=os_getTarget(e);os_is_stopped=true;if(os_timer!=null&&os_timer.id!=null){clearTimeout(os_timer.id);os_timer=null;}for(i=0;i<os_autoload_inputs.length;i++){var r=os_map[os_autoload_inputs[i]];if(r!=null){var b=document.getElementById(r.searchform);if(b!=null&&b==targ){r.query=document.getElementById(r.searchbox).value;}os_hideResults(r);}}return true;};window.os_hideResults=function(r){if(os_use_datalist){document.getElementById(r.searchbox).setAttribute('list','');}else{var c=document.getElementById(r.container);if(c!=null){c.style.visibility='hidden';}}r.visible=false;r.selected=-1;};window.os_decodeValue=function(value){if(decodeURIComponent){return decodeURIComponent(value);}if(unescape){return unescape(value);}return null;};window.os_encodeQuery=function(
+value){if(encodeURIComponent){return encodeURIComponent(value);}if(escape){return escape(value);}return null;};window.os_updateResults=function(r,query,text,cacheKey){os_cache[cacheKey]=text;r.query=query;r.original=query;if(text==''){r.results=null;r.resultCount=0;os_hideResults(r);}else{try{var p=eval('('+text+')');if(p.length<2||p[1].length==0){r.results=null;r.resultCount=0;os_hideResults(r);return;}if(os_use_datalist){os_setupDatalist(r,p[1]);}else{os_setupDiv(r,p[1]);}}catch(e){os_hideResults(r);os_cache[cacheKey]=null;}}};window.os_setupDatalist=function(r,results){var s=document.getElementById(r.searchbox);var c=document.getElementById(r.container);if(c==null){c=document.createElement('datalist');c.setAttribute('id',r.container);document.body.appendChild(c);}else{c.innerHTML='';}s.setAttribute('list',r.container);r.results=[];r.resultCount=results.length;r.visible=true;for(i=0;i<results.length;i++){var title=os_decodeValue(results[i]);var opt=document.createElement('option');
+opt.value=title;r.results[i]=title;c.appendChild(opt);}};window.os_getNamespaces=function(r){var namespaces='';var elements=document.forms[r.searchform].elements;for(i=0;i<elements.length;i++){var name=elements[i].name;if(typeof name!='undefined'&&name.length>2&&name[0]=='n'&&name[1]=='s'&&((elements[i].type=='checkbox'&&elements[i].checked)||(elements[i].type=='hidden'&&elements[i].value=='1'))){if(namespaces!=''){namespaces+='|';}namespaces+=name.substring(2);}}if(namespaces==''){namespaces=mw.config.get('wgSearchNamespaces').join('|');}return namespaces;};window.os_updateIfRelevant=function(r,query,text,cacheKey){var t=document.getElementById(r.searchbox);if(t!=null&&t.value==query){os_updateResults(r,query,text,cacheKey);}r.query=query;};window.os_delayedFetch=function(){if(os_timer==null){return;}var r=os_timer.r;var query=os_timer.query;os_timer=null;var path=mw.config.get('wgMWSuggestTemplate').replace("{namespaces}",os_getNamespaces(r)).replace("{dbname}",mw.config.get(
+'wgDBname')).replace("{searchTerms}",os_encodeQuery(query));var cached=os_cache[path];if(cached!=null&&cached!=undefined){os_updateIfRelevant(r,query,cached,path);}else{var xmlhttp=sajax_init_object();if(xmlhttp){try{xmlhttp.open('GET',path,true);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4&&typeof os_updateIfRelevant=='function'){os_updateIfRelevant(r,query,xmlhttp.responseText,path);}};xmlhttp.send(null);}catch(e){if(window.location.hostname=='localhost'){alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing.");}throw e;}}}};window.os_fetchResults=function(r,query,timeout){if(query==''){r.query='';os_hideResults(r);return;}else if(query==r.query){return;}os_is_stopped=false;if(os_timer!=null&&os_timer.id!=null){clearTimeout(os_timer.id);}if(timeout!=0){os_timer=new os_Timer(setTimeout("os_delayedFetch()",timeout),r,query);}else{os_timer=new os_Timer(null,r,query);os_delayedFetch();}};window.os_getTarget=function(
+e){if(!e){e=window.event;}if(e.target){return e.target;}else if(e.srcElement){return e.srcElement;}else{return null;}};window.os_isNumber=function(x){if(x==''||isNaN(x)){return false;}for(var i=0;i<x.length;i++){var c=x.charAt(i);if(!(c>='0'&&c<='9')){return false;}}return true;};window.os_enableSuggestionsOn=function(inputId,formName){os_initHandlers(inputId,formName,document.getElementById(inputId));};window.os_disableSuggestionsOn=function(inputId){r=os_map[inputId];if(r!=null){os_timer=null;os_hideResults(r);document.getElementById(inputId).setAttribute('autocomplete','on');os_map[inputId]=null;}var index=os_autoload_inputs.indexOf(inputId);if(index>=0){os_autoload_inputs[index]=os_autoload_forms[index]='';}};window.os_eventBlur=function(e){var targ=os_getTarget(e);var r=os_map[targ.id];if(r==null){return;}if(!os_mouse_pressed){os_hideResults(r);r.stayHidden=true;if(os_timer!=null&&os_timer.id!=null){clearTimeout(os_timer.id);}os_timer=null;}};window.os_eventFocus=function(e){var
+targ=os_getTarget(e);var r=os_map[targ.id];if(r==null){return;}r.stayHidden=false;};window.os_setupDiv=function(r,results){var c=document.getElementById(r.container);if(c==null){c=os_createContainer(r);}c.innerHTML=os_createResultTable(r,results);var t=document.getElementById(r.resultTable);r.containerTotal=t.offsetHeight;r.containerRow=t.offsetHeight/r.resultCount;os_fitContainer(r);os_trimResultText(r);os_showResults(r);};window.os_createResultTable=function(r,results){var c=document.getElementById(r.container);var width=c.offsetWidth-os_operaWidthFix(c.offsetWidth);var html='<table class="os-suggest-results" id="'+r.resultTable+'" style="width: '+width+'px;">';r.results=[];r.resultCount=results.length;for(i=0;i<results.length;i++){var title=os_decodeValue(results[i]);r.results[i]=title;html+='<tr><td class="os-suggest-result" id="'+r.resultTable+i+'"><span id="'+r.resultText+i+'">'+title+'</span></td></tr>';}html+='</table>';return html;};window.os_showResults=function(r){if(
+os_is_stopped){return;}if(r.stayHidden){return;}os_fitContainer(r);var c=document.getElementById(r.container);r.selected=-1;if(c!=null){c.scrollTop=0;c.style.visibility='visible';r.visible=true;}};window.os_operaWidthFix=function(x){if(typeof document.body.style.overflowX!='string'){return 30;}return 0;};window.f_clientWidth=function(){return f_filterResults(window.innerWidth?window.innerWidth:0,document.documentElement?document.documentElement.clientWidth:0,document.body?document.body.clientWidth:0);};window.f_clientHeight=function(){return f_filterResults(window.innerHeight?window.innerHeight:0,document.documentElement?document.documentElement.clientHeight:0,document.body?document.body.clientHeight:0);};window.f_scrollLeft=function(){return f_filterResults(window.pageXOffset?window.pageXOffset:0,document.documentElement?document.documentElement.scrollLeft:0,document.body?document.body.scrollLeft:0);};window.f_scrollTop=function(){return f_filterResults(window.pageYOffset?window.
+pageYOffset:0,document.documentElement?document.documentElement.scrollTop:0,document.body?document.body.scrollTop:0);};window.f_filterResults=function(n_win,n_docel,n_body){var n_result=n_win?n_win:0;if(n_docel&&(!n_result||(n_result>n_docel))){n_result=n_docel;}return n_body&&(!n_result||(n_result>n_body))?n_body:n_result;};window.os_availableHeight=function(r){var absTop=document.getElementById(r.container).style.top;var px=absTop.lastIndexOf('px');if(px>0){absTop=absTop.substring(0,px);}return f_clientHeight()-(absTop-f_scrollTop());};window.os_getElementPosition=function(elemID){var offsetTrail=document.getElementById(elemID);var offsetLeft=0;var offsetTop=0;while(offsetTrail){offsetLeft+=offsetTrail.offsetLeft;offsetTop+=offsetTrail.offsetTop;offsetTrail=offsetTrail.offsetParent;}if(navigator.userAgent.indexOf('Mac')!=-1&&typeof document.body.leftMargin!='undefined'){offsetLeft+=document.body.leftMargin;offsetTop+=document.body.topMargin;}return{left:offsetLeft,top:offsetTop};};
+window.os_createContainer=function(r){var c=document.createElement('div');var s=document.getElementById(r.searchbox);var pos=os_getElementPosition(r.searchbox);var left=pos.left;var top=pos.top+s.offsetHeight;c.className='os-suggest';c.setAttribute('id',r.container);document.body.appendChild(c);c=document.getElementById(r.container);c.style.top=top+'px';c.style.left=left+'px';c.style.width=s.offsetWidth+'px';c.onmouseover=function(event){os_eventMouseover(r.searchbox,event);};c.onmousemove=function(event){os_eventMousemove(r.searchbox,event);};c.onmousedown=function(event){return os_eventMousedown(r.searchbox,event);};c.onmouseup=function(event){os_eventMouseup(r.searchbox,event);};return c;};window.os_fitContainer=function(r){var c=document.getElementById(r.container);var h=os_availableHeight(r)-20;var inc=r.containerRow;h=parseInt(h/inc)*inc;if(h<(2*inc)&&r.resultCount>1){h=2*inc;}if((h/inc)>os_max_lines_per_suggest){h=inc*os_max_lines_per_suggest;}if(h<r.containerTotal){c.style.
+height=h+'px';r.containerCount=parseInt(Math.round(h/inc));}else{c.style.height=r.containerTotal+'px';r.containerCount=r.resultCount;}};window.os_trimResultText=function(r){var maxW=0;for(var i=0;i<r.resultCount;i++){var e=document.getElementById(r.resultText+i);if(e.offsetWidth>maxW){maxW=e.offsetWidth;}}var w=document.getElementById(r.container).offsetWidth;var fix=0;if(r.containerCount<r.resultCount){fix=20;}else{fix=os_operaWidthFix(w);}if(fix<4){fix=4;}maxW+=fix;var normW=document.getElementById(r.searchbox).offsetWidth;var prop=maxW/normW;if(prop>os_container_max_width){prop=os_container_max_width;}else if(prop<1){prop=1;}var newW=Math.round(normW*prop);if(w!=newW){w=newW;if(os_animation_timer!=null){clearInterval(os_animation_timer.id);}os_animation_timer=new os_AnimationTimer(r,w);os_animation_timer.id=setInterval("os_animateChangeWidth()",os_animation_delay);w-=fix;}if(w<10){return;}for(var i=0;i<r.resultCount;i++){var e=document.getElementById(r.resultText+i);var replace=1;
+var lastW=e.offsetWidth+1;var iteration=0;var changedText=false;while(e.offsetWidth>w&&(e.offsetWidth<lastW||iteration<2)){changedText=true;lastW=e.offsetWidth;var l=e.innerHTML;e.innerHTML=l.substring(0,l.length-replace)+'...';iteration++;replace=4;}if(changedText){document.getElementById(r.resultTable+i).setAttribute('title',r.results[i]);}}};window.os_animateChangeWidth=function(){var r=os_animation_timer.r;var c=document.getElementById(r.container);var w=c.offsetWidth;var normW=document.getElementById(r.searchbox).offsetWidth;var normL=os_getElementPosition(r.searchbox).left;var inc=os_animation_timer.inc;var target=os_animation_timer.target;var nw=w+inc;if((inc>0&&nw>=target)||(inc<=0&&nw<=target)){c.style.width=target+'px';clearInterval(os_animation_timer.id);os_animation_timer=null;}else{c.style.width=nw+'px';if(document.documentElement.dir=='rtl'){c.style.left=(normL+normW+(target-nw)-os_animation_timer.target-1)+'px';}}};window.os_changeHighlight=function(r,cur,next,
+updateSearchBox){if(next>=r.resultCount){next=r.resultCount-1;}if(next<-1){next=-1;}r.selected=next;if(cur==next){return;}if(cur>=0){var curRow=document.getElementById(r.resultTable+cur);if(curRow!=null){curRow.className='os-suggest-result';}}var newText;if(next>=0){var nextRow=document.getElementById(r.resultTable+next);if(nextRow!=null){nextRow.className=os_HighlightClass();}newText=r.results[next];}else{newText=r.original;}if(r.containerCount<r.resultCount){var c=document.getElementById(r.container);var vStart=c.scrollTop/r.containerRow;var vEnd=vStart+r.containerCount;if(next<vStart){c.scrollTop=next*r.containerRow;}else if(next>=vEnd){c.scrollTop=(next-r.containerCount+1)*r.containerRow;}}if(updateSearchBox){os_updateSearchQuery(r,newText);}};window.os_HighlightClass=function(){var match=navigator.userAgent.match(/AppleWebKit\/(\d+)/);if(match){var webKitVersion=parseInt(match[1]);if(webKitVersion<523){return'os-suggest-result-hl-webkit';}}return'os-suggest-result-hl';};window.
+os_updateSearchQuery=function(r,newText){document.getElementById(r.searchbox).value=newText;r.query=newText;};window.os_eventMouseover=function(srcId,e){var targ=os_getTarget(e);var r=os_map[srcId];if(r==null||!os_mouse_moved){return;}var num=os_getNumberSuffix(targ.id);if(num>=0){os_changeHighlight(r,r.selected,num,false);}};window.os_getNumberSuffix=function(id){var num=id.substring(id.length-2);if(!(num.charAt(0)>='0'&&num.charAt(0)<='9')){num=num.substring(1);}if(os_isNumber(num)){return parseInt(num);}else{return-1;}};window.os_eventMousemove=function(srcId,e){os_mouse_moved=true;};window.os_eventMousedown=function(srcId,e){var targ=os_getTarget(e);var r=os_map[srcId];if(r==null){return;}var num=os_getNumberSuffix(targ.id);os_mouse_pressed=true;if(num>=0){os_mouse_num=num;}document.getElementById(r.searchbox).focus();return false;};window.os_eventMouseup=function(srcId,e){var targ=os_getTarget(e);var r=os_map[srcId];if(r==null){return;}var num=os_getNumberSuffix(targ.id);if(num>=0
+&&os_mouse_num==num){os_updateSearchQuery(r,r.results[num]);os_hideResults(r);document.getElementById(r.searchform).submit();}os_mouse_pressed=false;document.getElementById(r.searchbox).focus();};window.os_createToggle=function(r,className){var t=document.createElement('span');t.className=className;t.setAttribute('id',r.toggle);var link=document.createElement('a');link.setAttribute('href','javascript:void(0);');link.onclick=function(){os_toggle(r.searchbox,r.searchform);};var msg=document.createTextNode(wgMWSuggestMessages[0]);link.appendChild(msg);t.appendChild(link);return t;};window.os_toggle=function(inputId,formName){r=os_map[inputId];var msg='';if(r==null){os_enableSuggestionsOn(inputId,formName);r=os_map[inputId];msg=wgMWSuggestMessages[0];}else{os_disableSuggestionsOn(inputId,formName);msg=wgMWSuggestMessages[1];}var link=document.getElementById(r.toggle).firstChild;link.replaceChild(document.createTextNode(msg),link.firstChild);};hookEvent('load',os_MWSuggestInit);;},{},{
+"search-mwsuggest-enabled":"with suggestions","search-mwsuggest-disabled":"no suggestions"});mw.loader.implement("mediawiki.page.ready",function($){jQuery(document).ready(function($){if(!('placeholder'in document.createElement('input'))){$('input[placeholder]').placeholder();}$('.mw-collapsible').makeCollapsible();if($('table.sortable').length){mw.loader.using('jquery.tablesorter',function(){$('table.sortable').tablesorter();});}$('input[type=checkbox]:not(.noshiftselect)').checkboxShiftClick();mw.util.updateTooltipAccessKeys();});;},{},{});
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:52f85c67a660c33318a4361f87c17a08 */
Index: s10k/Vago/help/XMLSNDD_files/load(7).php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load(7).php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load(7).php	(revision 1092)
@@ -0,0 +1,13 @@
+function getURLParamValue(paramName,url){if(typeof(url)=='undefined'||url===null)url=document.location.href;var cmdRe=RegExp('[&?]'+paramName+'=([^&#]*)');var m=cmdRe.exec(url);if(m&&m.length>1)return decodeURIComponent(m[1]);return null;}var extraJS=getURLParamValue("withJS");if(extraJS&&extraJS.match("^MediaWiki:[^&<>=%]*\.js$")){importScript(extraJS);}if(wgAction=="edit"||wgAction=="submit"||wgPageName=="Special:Upload"){importScript("MediaWiki:Common.js/edit.js")}else if(wgPageName=="Special:Search"){importScript("MediaWiki:Common.js/search.js")}if(navigator.appName=='Microsoft Internet Explorer'){var oldWidth;var docEl=document.documentElement;var fixIEScroll=function(){if(!oldWidth||docEl.clientWidth>oldWidth){doFixIEScroll();}else{setTimeout(doFixIEScroll,1);}oldWidth=docEl.clientWidth;};var doFixIEScroll=function(){docEl.style.overflowX=(docEl.scrollWidth-docEl.clientWidth<4)?"hidden":"";};document.attachEvent("onreadystatechange",fixIEScroll);document.attachEvent("onresize",
+fixIEScroll);appendCSS('@media print {sup, sub, p, .documentDescription {line-height: normal;}}');appendCSS('div.overflowbugx {overflow-x: scroll !important; overflow-y: hidden !important;} div.overflowbugy {overflow-y: scroll !important; overflow-x: hidden !important;}');appendCSS('.iezoomfix div, .iezoomfix table {zoom: 1;}');if(navigator.appVersion.substr(22,1)=='6'){importScript('MediaWiki:Common.js/IE60Fixes.js');}}var hasClass=(function(){var reCache={};return function(element,className){return(reCache[className]?reCache[className]:(reCache[className]=new RegExp("(?:\\s|^)"+className+"(?:\\s|$)"))).test(element.className);};})();function showDescrip(typeID,show_or_not){var DescripPanel=document.getElementsByClassName("hovertable_descrip")[0];var Descrips=DescripPanel.getElementsByTagName("span");if(!DescripPanel||!Descrips)return false;for(var i=0;i<Descrips.length;i++){if(Descrips[i].id==typeID){if(show_or_not)Descrips[i].style.display="block";else Descrips[i].style.display=
+"none";}}}function initHoverTables(){var Tables=document.getElementsByClassName("hovertable");if(!Tables)return false;for(var i=0;i<Tables.length;i++){var Cells=Tables[i].getElementsByTagName("td");if(!Cells)continue;for(var j=0;j<Cells.length;j++){if(hasClass(Cells[j],"hovercell")){addHandler(Cells[j],"mouseover",new Function("evt","showDescrip(this.id, true);"));addHandler(Cells[j],"mouseout",new Function("evt","showDescrip(this.id, false);"));}}}}addOnloadHook(initHoverTables);function swapImage(gifID,show_gif){var gif_span=document.getElementById(gifID);var gif_image=gif_span.getElementsByClassName("image")[0];var gif_img=gif_image.getElementsByTagName("img")[0];var gif_src=gif_img.src;if(!gif_img)return false;if(show_gif)gif_img.src=gif_src.replace('.jpg','.gif');else gif_img.src=gif_src.replace('.gif','.jpg');}function initHoverGIFs(){var gifs=document.getElementsByClassName("hovergif");if(!gifs)return false;for(var i=0;i<gifs.length;i++){addHandler(gifs[i],"mouseover",new
+Function("evt","swapImage(this.id, true);"));addHandler(gifs[i],"mouseout",new Function("evt","swapImage(this.id, false);"));}}addOnloadHook(initHoverGIFs);var autoCollapse=2;var collapseCaption="hide";var expandCaption="show";function collapseTable(tableIndex){var Button=document.getElementById("collapseButton"+tableIndex);var Table=document.getElementById("collapsibleTable"+tableIndex);if(!Table||!Button){return false;}var Rows=Table.rows;if(Button.firstChild.data==collapseCaption){for(var i=1;i<Rows.length;i++){Rows[i].style.display="none";}Button.firstChild.data=expandCaption;}else{for(var i=1;i<Rows.length;i++){Rows[i].style.display=Rows[0].style.display;}Button.firstChild.data=collapseCaption;}}function createCollapseButtons(){var tableIndex=0;var NavigationBoxes=new Object();var Tables=document.getElementsByTagName("table");for(var i=0;i<Tables.length;i++){if(hasClass(Tables[i],"collapsible")){var HeaderRow=Tables[i].getElementsByTagName("tr")[0];if(!HeaderRow)continue;var Header
+=HeaderRow.getElementsByTagName("th")[0];if(!Header)continue;NavigationBoxes[tableIndex]=Tables[i];Tables[i].setAttribute("id","collapsibleTable"+tableIndex);var Button=document.createElement("span");var ButtonLink=document.createElement("a");var ButtonText=document.createTextNode(collapseCaption);Button.className="collapseButton";ButtonLink.style.color=Header.style.color;ButtonLink.setAttribute("id","collapseButton"+tableIndex);ButtonLink.setAttribute("href","#");addHandler(ButtonLink,"click",new Function("evt","collapseTable("+tableIndex+" ); return killEvt(evt);"));ButtonLink.appendChild(ButtonText);Button.appendChild(document.createTextNode("["));Button.appendChild(ButtonLink);Button.appendChild(document.createTextNode("]"));Header.insertBefore(Button,Header.childNodes[0]);tableIndex++;}}for(var i=0;i<tableIndex;i++){if(hasClass(NavigationBoxes[i],"collapsed")||(tableIndex>=autoCollapse&&hasClass(NavigationBoxes[i],"autocollapse"))){collapseTable(i);}else if(hasClass(
+NavigationBoxes[i],"innercollapse")){var element=NavigationBoxes[i];while(element=element.parentNode){if(hasClass(element,"outercollapse")){collapseTable(i);break;}}}}}addOnloadHook(createCollapseButtons);var NavigationBarHide='['+collapseCaption+']';var NavigationBarShow='['+expandCaption+']';function toggleNavigationBar(indexNavigationBar){var NavToggle=document.getElementById("NavToggle"+indexNavigationBar);var NavFrame=document.getElementById("NavFrame"+indexNavigationBar);if(!NavFrame||!NavToggle)return false;if(NavToggle.firstChild.data==NavigationBarHide){for(var NavChild=NavFrame.firstChild;NavChild!=null;NavChild=NavChild.nextSibling){if(hasClass(NavChild,'NavContent')||hasClass(NavChild,'NavPic')){NavChild.style.display='none';}}NavToggle.firstChild.data=NavigationBarShow;}else if(NavToggle.firstChild.data==NavigationBarShow){for(var NavChild=NavFrame.firstChild;NavChild!=null;NavChild=NavChild.nextSibling){if(hasClass(NavChild,'NavContent')||hasClass(NavChild,'NavPic')){
+NavChild.style.display='block';}}NavToggle.firstChild.data=NavigationBarHide;}}function createNavigationBarToggleButton(){var indexNavigationBar=0;var divs=document.getElementsByTagName("div");for(var i=0;NavFrame=divs[i];i++){if(hasClass(NavFrame,"NavFrame")){indexNavigationBar++;var NavToggle=document.createElement("a");NavToggle.className='NavToggle';NavToggle.setAttribute('id','NavToggle'+indexNavigationBar);NavToggle.setAttribute('href','javascript:toggleNavigationBar('+indexNavigationBar+');');var isCollapsed=hasClass(NavFrame,"collapsed");for(var NavChild=NavFrame.firstChild;NavChild!=null&&!isCollapsed;NavChild=NavChild.nextSibling){if(hasClass(NavChild,'NavPic')||hasClass(NavChild,'NavContent')){if(NavChild.style.display=='none'){isCollapsed=true;}}}if(isCollapsed){for(var NavChild=NavFrame.firstChild;NavChild!=null;NavChild=NavChild.nextSibling){if(hasClass(NavChild,'NavPic')||hasClass(NavChild,'NavContent')){NavChild.style.display='none';}}}var NavToggleText=document.
+createTextNode(isCollapsed?NavigationBarShow:NavigationBarHide);NavToggle.appendChild(NavToggleText);for(var j=0;j<NavFrame.childNodes.length;j++){if(hasClass(NavFrame.childNodes[j],"NavHead")){NavToggle.style.color=NavFrame.childNodes[j].style.color;NavFrame.childNodes[j].appendChild(NavToggle);}}NavFrame.setAttribute('id','NavFrame'+indexNavigationBar);}}}addOnloadHook(createNavigationBarToggleButton);function ModifySidebar(action,section,name,link){try{switch(section){case"languages":var target="p-lang";break;case"toolbox":var target="p-tb";break;case"navigation":var target="p-navigation";break;default:var target="p-"+section;break;}if(action=="add"){var node=document.getElementById(target).getElementsByTagName('div')[0].getElementsByTagName('ul')[0];var aNode=document.createElement('a');var liNode=document.createElement('li');aNode.appendChild(document.createTextNode(name));aNode.setAttribute('href',link);liNode.appendChild(aNode);liNode.className='plainlinks';node.appendChild(
+liNode);}if(action=="sep"){var node=document.getElementById(target).getElementsByTagName('div')[0].getElementsByTagName('ul')[0];var liNode=document.createElement('li');liNode.style.listStyleImage="url('http://wiki.oni2.net/w/images/1/10/Separator.png')";liNode.style.listStylePosition='inside';node.appendChild(liNode);}if(action=="remove"){var list=document.getElementById(target).getElementsByTagName('div')[0].getElementsByTagName('ul')[0];var listelements=list.getElementsByTagName('li');for(var i=0;i<listelements.length;i++){if(listelements[i].getElementsByTagName('a')[0].innerHTML==name||listelements[i].getElementsByTagName('a')[0].href==link){list.removeChild(listelements[i]);}}}}catch(e){return;}}ts_alternate_row_colors=false;function uploadwizard_newusers(){if(wgNamespaceNumber==4&&wgTitle=="Upload"&&wgAction=="view"){var oldDiv=document.getElementById("autoconfirmedusers"),newDiv=document.getElementById("newusers");if(oldDiv&&newDiv){if(typeof wgUserGroups=="object"&&wgUserGroups
+){for(i=0;i<wgUserGroups.length;i++){if(wgUserGroups[i]=="autoconfirmed"){oldDiv.style.display="block";newDiv.style.display="none";return;}}}oldDiv.style.display="none";newDiv.style.display="block";return;}}}addOnloadHook(uploadwizard_newusers);function sortSortableTables(){var divs=document.getElementsByTagName("div");if(!divs)return;for(var i=0;i<divs.length;i++){var theDiv=divs[i];var tables=theDiv.getElementsByTagName("table");if(!tables)continue;for(var j=0;j<tables.length;j++){var theTable=tables[j];if(hasClass(theTable,"sortable")&&hasClass(theTable,"autosort")){var sortColumnNum=1,curColumnNum=0;if(hasClass(theTable,"by-column..")){for(var col=1;col<10;col++){var colOption="by-column-"+col;if(hasClass(theTable,colOption)){sortColumnNum=col;break;}}}var allTHs=theTable.getElementsByTagName("th");if(!allTHs)continue;for(var k=0;k<allTHs.length;k++){if(hasClass(allTHs[k],"headerSort")){curColumnNum++;if(curColumnNum==sortColumnNum){$(allTHs[k]).trigger("click");return;}}}}}}}
+addOnloadHook(sortSortableTables);;mw.loader.state({"site":"ready"});
+
+/* cache key: oni_wiki:resourceloader:filter:minify-js:7:40236b2b143c47679865c5b1092d016e */
Index: s10k/Vago/help/XMLSNDD_files/load.php
===================================================================
--- s10k/Vago/help/XMLSNDD_files/load.php	(revision 1092)
+++ s10k/Vago/help/XMLSNDD_files/load.php	(revision 1092)
@@ -0,0 +1,3 @@
+@media print{  a.stub,a.new{color:#ba0000;text-decoration:none}#toc{border:1px solid #aaaaaa;background-color:#f9f9f9;padding:5px} div.floatright{float:right;clear:right;position:relative;margin:0.5em 0 0.8em 1.4em}div.floatright p{font-style:italic}div.floatleft{float:left;clear:left;position:relative;margin:0.5em 1.4em 0.8em 0}div.floatleft p{font-style:italic}div.center{text-align:center} div.thumb{border:none;width:auto;margin-top:0.5em;margin-bottom:0.8em;background-color:transparent}div.thumbinner{border:1px solid #cccccc;padding:3px !important;background-color:White;font-size:94%;text-align:center;overflow:hidden}html .thumbimage{border:1px solid #cccccc}html .thumbcaption{border:none;text-align:left;line-height:1.4em;padding:3px !important;font-size:94%}div.magnify{display:none} div.tright{float:right;clear:right;margin:0.5em 0 0.8em 1.4em} div.tleft{float:left;clear:left;margin:0.5em 1.4em 0.8em 0}img.thumbborder{border:1px solid #dddddd} table.rimage{float:right;width:1pt;position:relative;margin-left:1em;margin-bottom:1em;text-align:center}body{background:white;color:black;margin:0;padding:0}.noprint,div#jump-to-nav,.mw-jump,div.top,div#column-one,#colophon,.editsection,.toctoggle,.tochidden,div#f-poweredbyico,div#f-copyrightico,li#viewcount,li#about,li#disclaimer,li#mobileview,li#privacy,#footer-places,.mw-hidden-catlinks,tr.mw-metadata-show-hide-extended,span.mw-filepage-other-resolutions,#filetoc{ display:none}ul{list-style-type:square}#content{background:none;border:none !important;padding:0 !important;margin:0 !important;direction:ltr}#footer{background :white;color :black;margin-top:1em;border-top:1px solid #AAA;direction:ltr}h1,h2,h3,h4,h5,h6{font-weight:bold}p{margin:1em 0;line-height:1.2em}pre{border:1pt dashed black;white-space:pre;font-size:8pt;overflow:auto;padding:1em 0;background:white;color:black}table.listing,table.listing td{border:1pt solid black;border-collapse:collapse}a{color:black !important;background:none !important;padding:0 !important}a:link,a:visited{color:#520;background:transparent;text-decoration:underline}#content a.external.text:after,#content a.external.autonumber:after{ content:" (" attr(href) ") "}#globalWrapper{width:100% !important;min-width:0 !important}#content{background:white;color:black}#column-content{margin:0 !important}#column-content #content{padding:1em;margin:0 !important} a,a.external,a.new,a.stub{color:black !important;text-decoration:none !important} a,a.external,a.new,a.stub{color:inherit !important;text-decoration:inherit !important}img{border:none;vertical-align:middle} span.texhtml{font-family:serif}#siteNotice{display:none} li.gallerybox{vertical-align:top;border:solid 2px white;display:-moz-inline-box;display:inline-block}ul.gallery,li.gallerybox{zoom:1;*display:inline}ul.gallery{margin:2px;padding:2px;display:block}li.gallerycaption{font-weight:bold;text-align:center;display:block;word-wrap:break-word}li.gallerybox div.thumb{text-align:center;border:1px solid #ccc;margin:2px}div.gallerytext{overflow:hidden;font-size:94%;padding:2px 4px;word-wrap:break-word} table.diff{background:white}td.diff-otitle{background:#ffffff}td.diff-ntitle{background:#ffffff}td.diff-addedline{background:#ccffcc;font-size:smaller;border:solid 2px black}td.diff-deletedline{background:#ffffaa;font-size:smaller;border:dotted 2px black}td.diff-context{background:#eeeeee;font-size:smaller}.diffchange{color:silver;font-weight:bold;text-decoration:underline} table.wikitable,table.mw_metadata{margin:1em 1em 1em 0;border:1px #aaa solid;background:white;border-collapse:collapse}table.wikitable > tr > th,table.wikitable > tr > td,table.wikitable > * > tr > th,table.wikitable > * > tr > td,.mw_metadata th,.mw_metadata td{border:1px #aaa solid;padding:0.2em}table.wikitable > tr > th,table.wikitable > * > tr > th,.mw_metadata th{text-align:center;background:white;font-weight:bold}table.wikitable > caption,.mw_metadata caption{font-weight:bold}a.sortheader{margin:0 0.3em} .wikitable,.thumb,img{page-break-inside:avoid}h2,h3,h4,h5,h6,h7{page-break-after:avoid}p{widows:3;orphans:3} .catlinks ul{display:inline;margin:0;padding:0;list-style:none;list-style-type:none;list-style-image:none;vertical-align:middle !ie}.catlinks li{display:inline-block;line-height:1.15em;padding:0 .4em;border-left:1px solid #AAA;margin:0.1em 0;zoom:1;display:inline !ie}.catlinks li:first-child{padding-left:.2em;border-left:none}}@media screen{   .mw-content-ltr{ direction:ltr}.mw-content-rtl{ direction:rtl} .sitedir-ltr textarea,.sitedir-ltr input{ direction:ltr}.sitedir-rtl textarea,.sitedir-rtl input{ direction:rtl}  input[type="submit"],input[type="button"],input[type="reset"],input[type="file"]{direction:ltr} textarea[dir="ltr"],input[dir="ltr"]{ direction:ltr}textarea[dir="rtl"],input[dir="rtl"]{ direction:rtl} abbr,acronym,.explain{border-bottom:1px dotted;cursor:help} .mw-plusminus-pos{color:#006400; }.mw-plusminus-neg{color:#8b0000; }.mw-plusminus-null{color:#aaa; } .allpagesredirect,.redirect-in-category,.watchlistredir{font-style:italic} span.comment{font-style:italic}span.changedby{font-size:95%} .texvc{direction:ltr;unicode-bidi:embed}img.tex{vertical-align:middle}span.texhtml{font-family:serif} #wikiPreview.ontop{margin-bottom:1em} #editform,#toolbar,#wpTextbox1{clear:both}#toolbar img{cursor:pointer}div#mw-js-message{margin:1em 5%;padding:0.5em 2.5%;border:solid 1px #ddd;background-color:#fcfcfc} .editsection{float:right;margin-left:5px} .mw-content-ltr .editsection,.mw-content-rtl .mw-content-ltr .editsection{ float:right}.mw-content-rtl .editsection,.mw-content-ltr .mw-content-rtl .editsection{ float:left} div.mw-filepage-resolutioninfo{font-size:smaller} h2#filehistory{clear:both}table.filehistory th,table.filehistory td{vertical-align:top}table.filehistory th{text-align:left}table.filehistory td.mw-imagepage-filesize,table.filehistory th.mw-imagepage-filesize{white-space:nowrap}table.filehistory td.filehistory-selected{font-weight:bold} .filehistory a img,#file img:hover{background:white url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGElEQVQYV2N4DwX/oYBhgARgDJjEAAkAAEC99wFuu0VFAAAAAElFTkSuQmCC) repeat;background:white url(http://wiki.oni2.net/w/skins/common/images/Checker-16x16.png?2012-08-30T22:25:00Z) repeat!ie} li span.deleted,span.history-deleted{text-decoration:line-through;color:#888;font-style:italic} .not-patrolled{background-color:#ffa}.unpatrolled{font-weight:bold;color:red}div.patrollink{font-size:75%;text-align:right} td.mw-label{text-align:right}td.mw-input{text-align:left}td.mw-submit{text-align:left}td.mw-label{vertical-align:top}.prefsection td.mw-label{width:20%}.prefsection table{width:100%}td.mw-submit{white-space:nowrap}table.mw-htmlform-nolabel td.mw-label{width:1px}tr.mw-htmlform-vertical-label td.mw-label{text-align:left !important}.mw-htmlform-invalid-input td.mw-input input{border-color:red}.mw-htmlform-flatlist div.mw-htmlform-flatlist-item{display:inline;margin-right:1em;white-space:nowrap}input#wpSummary{width:80%} .thumbcaption{text-align:left}.magnify{float:right} #catlinks{ text-align:left}.catlinks ul{display:inline;margin:0;padding:0;list-style:none;list-style-type:none;list-style-image:none;vertical-align:middle !ie}.catlinks li{display:inline-block;line-height:1.25em;border-left:1px solid #AAA;margin:0.125em 0;padding:0 0.5em;zoom:1;display:inline !ie}.catlinks li:first-child{padding-left:0.25em;border-left:none} .mw-hidden-cats-hidden{display:none}.catlinks-allhidden{display:none} p.mw-ipb-conveniencelinks,p.mw-protect-editreasons,p.mw-filedelete-editreasons,p.mw-delete-editreasons,p.mw-revdel-editreasons{font-size:90%;text-align:right} .os-suggest{overflow:auto;overflow-x:hidden;position:absolute;top:0;left:0;width:0;background-color:white;border-style:solid;border-color:#AAAAAA;border-width:1px;z-index:99;font-size:95%}table.os-suggest-results{font-size:95%;cursor:pointer;border:0;border-collapse:collapse;width:100%}.os-suggest-result,.os-suggest-result-hl{white-space:nowrap;background-color:white;color:black;padding:2px}.os-suggest-result-hl,.os-suggest-result-hl-webkit{background-color:#4C59A6;color:white}.os-suggest-toggle{position:relative;left:1ex;font-size:65%}.os-suggest-toggle-def{position:absolute;top:0;left:0;font-size:65%;visibility:hidden}  .autocomment{color:gray}#pagehistory .history-user{margin-left:0.4em;margin-right:0.2em}#pagehistory span.minor{font-weight:bold}#pagehistory li{border:1px solid white}#pagehistory li.selected{background-color:#f9f9f9;border:1px dashed #aaa}.mw-history-revisiondelete-button,#mw-fileduplicatesearch-icon{float:right} .newpage,.minoredit,.botedit{font-weight:bold}#shared-image-dup,#shared-image-conflict{font-style:italic} div.mw-warning-with-logexcerpt{padding:3px;margin-bottom:3px;border:2px solid #2F6FAB;clear:both}div.mw-warning-with-logexcerpt ul li{font-size:90%} span.mw-revdelundel-link,strong.mw-revdelundel-link{font-size:90%}span.mw-revdelundel-hidden,input.mw-revdelundel-hidden{visibility:hidden}td.mw-revdel-checkbox,th.mw-revdel-checkbox{padding-right:10px;text-align:center} a.feedlink{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AkOCjkSL9xYhAAAAc9JREFUKJE90LFrU1EYQPHzffe+l/iSVkXTmNiANBU7iE5OLrbSVYKIiy5dnARB3FwEB5dOOhQKuthJEEHRsUXBoosO0lKKEYRa29LWQk3S5L53r0PVv+D8OPJlolrrr1ZmI7F1BFEjqBXECGJAjSBCaLddc7u5Mmb7q5U5007rWh5E9rYR/xsTBBXBWMVEglqRpGiGhcE5G6kdyugxcGsGyRdJ15ZwC29IF55jNEWt8K+aFOMhc+dC7Z6SITjC7ga2MkI8cpH41Dhh7RPa20Gt4toZac+IqhFMTpG0hVt8RetJg967SaTvGLnGNKZ0EtfOcB1P5jyqVjCRkIzfpnjtMYXrT2FrCff6JqhFRx/gnCXtZHgXUFHQSGg/u4Gbf4T2lYkvTaFGce8fIgePY09fwXU8Pg3sk2JFu5v4lQ+4FxPge+j5u3Q+v8TvrBKfbZB1PT4LqJh9Uv7yFLmrM2i+gPs4jRyqIaUz7C2+xZZOEA4cJaSgaAhqhbC1DK0N3K9NusvzAHB4GLf+HQBJBsiCD7J6/9zXI2VbVyv/b6Sdv1e6nrTryboB7wVbyjXt1rcfo0Frs4UkqvtUJHMBjyVEAcSjFiQJwRvf3F3/OfYH/dDFWrCooaIAAAAASUVORK5CYII=) center left no-repeat;background:url(http://wiki.oni2.net/w/skins/common/images/feed-icon.png?2012-08-30T22:25:00Z) center left no-repeat!ie;padding-left:16px} .plainlinks a{background:none !important;padding:0 !important}  .rtl a.external.free,.rtl a.external.autonumber{direction:ltr;unicode-bidi:embed} table.wikitable{margin:1em 1em 1em 0;background-color:#f9f9f9;border:1px #aaa solid;border-collapse:collapse;color:black}table.wikitable > tr > th,table.wikitable > tr > td,table.wikitable > * > tr > th,table.wikitable > * > tr > td{border:1px #aaa solid;padding:0.2em}table.wikitable > tr > th,table.wikitable > * > tr > th{background-color:#f2f2f2;text-align:center}table.wikitable > caption{font-weight:bold} table.collapsed tr.collapsable{display:none} .success{color:green;font-size:larger}.warning{color:#FFA500; font-size:larger}.error{color:red;font-size:larger}.errorbox,.warningbox,.successbox{font-size:larger;border:2px solid;padding:.5em 1em;float:left;margin-bottom:2em;color:#000}.errorbox{border-color:red;background-color:#fff2f2}.warningbox{border-color:#FF8C00; background-color:#FFFFC0}.successbox{border-color:green;background-color:#dfd}.errorbox h2,.warningbox h2,.successbox h2{font-size:1em;font-weight:bold;display:inline;margin:0 .5em 0 0;border:none} .mw-infobox{border:2px solid #ff7f00;margin:0.5em;clear:left;overflow:hidden}.mw-infobox-left{margin:7px;float:left;width:35px}.mw-infobox-right{margin:0.5em 0.5em 0.5em 49px} .previewnote{color:#c00;margin-bottom:1em}.previewnote p{text-indent:3em;margin:0.8em 0}.visualClear{clear:both}#mw_trackbacks{border:solid 1px #bbbbff;background-color:#eeeeff;padding:0.2em} .mw-datatable{border-collapse:collapse}.mw-datatable,.mw-datatable td,.mw-datatable th{border:1px solid #aaaaaa;padding:0 0.15em 0 0.15em}.mw-datatable th{background-color:#ddddff}.mw-datatable td{background-color:#ffffff}.mw-datatable tr:hover td{background-color:#eeeeff} .TablePager{min-width:80%}.TablePager_nav{margin:0 auto}.TablePager_nav td{padding:3px;text-align:center}.TablePager_nav a{text-decoration:none}.imagelist td,.imagelist th{white-space:nowrap}.imagelist .TablePager_col_links{background-color:#eeeeff}.imagelist .TablePager_col_img_description{white-space:normal}.imagelist th.TablePager_sort{background-color:#ccccff} ul#filetoc{text-align:center;border:1px solid #aaaaaa;background-color:#f9f9f9;padding:5px;font-size:95%;margin-bottom:0.5em;margin-left:0;margin-right:0}#filetoc li{display:inline;list-style-type:none;padding-right:2em} table.mw_metadata{font-size:0.8em;margin-left:0.5em;margin-bottom:0.5em;width:400px}table.mw_metadata caption{font-weight:bold}table.mw_metadata th{font-weight:normal}table.mw_metadata td{padding:0.1em}table.mw_metadata{border:none;border-collapse:collapse}table.mw_metadata td,table.mw_metadata th{text-align:center;border:1px solid #aaaaaa;padding-left:5px;padding-right:5px}table.mw_metadata th{background-color:#f9f9f9}table.mw_metadata td{background-color:#fcfcfc}table.mw_metadata ul.metadata-langlist{list-style-type:none;list-style-image:none;padding-right:5px;padding-left:5px;margin:0} .mw-content-ltr ul,.mw-content-rtl .mw-content-ltr ul{ margin:0.3em 0 0 1.6em;padding:0}.mw-content-rtl ul,.mw-content-ltr .mw-content-rtl ul{ margin:0.3em 1.6em 0 0;padding:0}.mw-content-ltr ol,.mw-content-rtl .mw-content-ltr ol{ margin:0.3em 0 0 3.2em;padding:0}.mw-content-rtl ol,.mw-content-ltr .mw-content-rtl ol{ margin:0.3em 3.2em 0 0;padding:0} .mw-content-ltr dd,.mw-content-rtl .mw-content-ltr dd{margin-left:1.6em;margin-right:0} .mw-content-rtl dd,.mw-content-ltr .mw-content-rtl dd{margin-right:1.6em;margin-left:0}   li.gallerybox{vertical-align:top;border:solid 2px white;display:-moz-inline-box;display:inline-block}ul.gallery,li.gallerybox{zoom:1;*display:inline}ul.gallery{margin:2px;padding:2px;display:block}li.gallerycaption{font-weight:bold;text-align:center;display:block;word-wrap:break-word}li.gallerybox div.thumb{text-align:center;border:1px solid #ccc;background-color:#f9f9f9;margin:2px}li.gallerybox div.thumb img{display:block;margin:0 auto}div.gallerytext{overflow:hidden;font-size:94%;padding:2px 4px;word-wrap:break-word}.mw-ajax-loader{background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==);background-image:url(http://wiki.oni2.net/w/skins/common/images/ajax-loader.gif?2012-08-30T22:25:00Z)!ie;background-position:center center;background-repeat:no-repeat;padding:16px;position:relative;top:-16px}.mw-small-spinner{padding:10px !important;margin-right:0.6em;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPUyAAEBAQICAgMDAwQEBAcHBwkJCSIiIigoKCwsLDQ0ND8/P0REREVFRU1NTVJSUlVVVVZWVl1dXWNjY25ubnBwcHR0dHh4eISEhIWFhYeHh4mJiZKSkpaWlpubm6Wlpaqqqra2tre3t7i4uLm5ubq6uru7u7+/v8DAwMLCwsPDw8TExMbGxsfHx8jIyMnJycrKys7OztDQ0P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkKADIAIf4aQ3JlYXRlZCB3aXRoIGFqYXhsb2FkLmluZm8AIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAFAAUAAAGlUCZcDhMOIhIImcyJBSEqVRy6EBUhIGADEYyTYcHhZCgTZG+w4fBIgsQZCSp8Cx8NIYKCbElXJFIMXUMDBEeX38pMEgPDBRfKytfG2hJHxoXGRmUIJwgKx2ZmJudipSmfXxTfolEMGZ0U69yMX+RMqlCLbAmcnBDZjKcMn62aHHBIFCwUyYkisJbf2hRQtAygadbxUlBACH5BAkKADcALAAAAAAUABQAhRISEhQUFBYWFh0dHR4eHiEhISIiIiMjIykpKSwsLC0tLS8vLzY2Njo6Oj8/P0FBQUhISEpKSlRUVFdXV2RkZGZmZm1tbW9vb3Nzc35+fn9/f4eHh4mJiYyMjJGRkZSUlJiYmJ2dnZ6enqOjo6SkpLa2tre3t7i4uLm5ubq6uru7u7y8vL+/v8DAwMLCwsPDw8TExMbGxsfHx8jIyMrKys7OztDQ0P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQwJtwOIxciEhiKDMsFISLRXJYeTBvBIIQgJgOHxJh9rYAeKmNDbZwCTCGqiHIM5RgiBFhTKWyCUkdHCExXnwvNUgfHSNeMy+FZ0k1KiWVkZWVMTGYJZeYiJGhQi8zXnuHRDUvKitnqyuPN5MqhDelQ3tDsHBDqzeWe7VnrL+dN76uKoiWsnyutcw3fqKywklBACH5BAkKADkALAAAAAAUABQAhQoKChAQEBERESgoKCoqKiwsLC4uLjU1NTY2Njc3Nzo6Ojw8PD09PT4+PkBAQENDQ0RERElJSVBQUFlZWWFhYWJiYmVlZXx8fIKCgoaGhoqKioyMjI+Pj5GRkZWVlZiYmJ6enqSkpKenp7Ozs7a2tre3t7i4uLm5ubq6uru7u7y8vL+/v8DAwMLCwsPDw8TExMXFxcbGxsfHx8jIyMrKys7OztDQ0NTU1NnZ2f///wAAAAAAAAAAAAAAAAAAAAAAAAaZwJxwOKRciEgibDRUMIQRSHII4pSEiYSw8JwKNR2sllHwDkMaZkLBOUSGDoywtRp6QsSJJ8cQCChzKSkwOF4EAAQWSC0pM14QgFM3Zkk1JZdXZpglMDCblJgpNZSkQy2OUzApK6NDNYx1XowpLUI2gjBCqLopQyu1Qr2BOZc5qrmUq8SZK8JezaPFObfOSS3AKZnTpUI1yFNBACH5BAkKADoALAAAAAAUABQAhQAAAAICAgMDAwQEBAcHBwkJCSIiIigoKCsrKzQ0ND4+Pj8/P0REREVFRU1NTVJSUlNTU1RUVFVVVVZWVlxcXGNjY25ubnFxcXR0dHh4eIODg4SEhIWFhYeHh4mJiZGRkZaWlpubm6Wlpaqqqra2tre3t7i4uLm5ubq6uru7u7y8vL+/v8DAwMLCwsPDw8TExMbGxsfHx8jIyMrKys7Ozs/Pz9DQ0NTU1NfX19nZ2f///wAAAAAAAAAAAAAAAAAAAAaZQJ1wOAyNiEhizjbseIQSSXLYSjF1Go2Q4ZgOUythp6OTMLxDWIqG7XwYlKEEJGyFhasZ8SIqHxAWdSkpMDheCwYMF0hVMF4VGV6GaEg0JJcklAEDnAkwmJloAaMFD5SnaY5TM2BsQzYtJHdTVSktQjaDqnppKUMrt0K+gjqXOmqqaGDFoVWUK2vMQjSDaC3BKaE6V6g0yUlBACH5BAkKADoALAAAAAAUABQAhRISEhQUFBYWFhwcHB0dHR4eHiEhISIiIiMjIysrKy8vLzc3Nzo6Oj8/P0FBQUhISFJSUlZWVldXV2VlZW1tbX9/f4KCgoeHh4mJiYuLi4yMjJCQkJSUlJiYmJmZmZqampycnJ2dnZ6enqOjo7CwsLa2tre3t7i4uLm5ubq6uru7u7y8vL+/v8DAwMLCwsPDw8TExMbGxsfHx8jIyMrKys7OztDQ0NTU1NfX19nZ2f///wAAAAAAAAAAAAAAAAAAAAaaQJ1wOCSViEhirjYMfYSfZ1LoUjF1UWFGMx2qXNAnJ9MdxqzYj0oTGk7aOhdryKIRRzHdxNGwUFUqMThdEAwRFUhVeVMUF12DZUg1JZRHZQMImA8xlZZdmZgUkUh+UzGLSQ4CChFENS4lc10LAAAKQjaAi3ZmKkMIt0K+fzqUOmeoXSpzxnHDXSxozTWAZS5gOiqeNqNDNclIQQAh+QQJCgBFACwAAAAAFAAUAIYKCgoQEBAREREnJycqKiosLCwuLi40NDQ1NTU2NjY3Nzc5OTk6Ojo8PDw9PT0+Pj4/Pz9ERERJSUlRUVFYWFhhYWFlZWVmZmZvb298fHyCgoKGhoaHh4eKioqNjY2SkpKVlZWenp6fn5+hoaGioqKjo6Onp6epqamrq6usrKyurq6vr6+xsbGzs7O2tra3t7e4uLi5ubm6urq7u7u8vLy/v7/AwMDCwsLDw8PExMTFxcXGxsbHx8fIyMjKysrOzs7Q0NDU1NTV1dXX19fZ2dn///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHqYBFgoODOz+EiIREh4IvL4IqKomDNzOMjoIkKJODMzeNjyginIWWRY47JJKCIjuCNzWDNT6EN0NFIhsdq5UzO7eTIBsfLYiVrpMmxZPApIQ/jpikBwvUFTvRj6TVBxAZzogenDe0kxQGEBjPNy+xkyQTBAYSgkAzvoLlghEEgxARnSjNOPXIAoAF4GbEkkZAgLMapqRZEACB1I1PRWZoK1JBAzhBP5BNCgQAIfkECQoAOgAsAAAAABQAFACFAQEBAgICAwMDBAQEBwcHCQkJIiIiKCgoLCwsNDQ0Pz8/RERERUVFTU1NUlJSVVVVVlZWXV1dY2Njbm5ucHBwdHR0eHh4gICAg4ODhISEhYWFh4eHiYmJkpKSlpaWm5ubpaWlqqqqtra2t7e3uLi4ubm5urq6u7u7vLy8v7+/wMDAwsLCw8PDxMTExsbGx8fHyMjIysrKy8vLzs7Oz8/P0NDQ1NTU1dXV19fX2dnZ////AAAAAAAAAAAAAAAAAAAABptAnXA4dM2ISGLuKByNhKtVcrg61ZpP3Uk6FW6xumq3ODo6cScXNQdNDVMxYgync52s0LuLPk2NVkxUaV0xgUh8Y0QzTk6JGBuPHy6MWV0bkBwhiUgdXStxUxQMDxiKKyNuUyARDKNCNXpCoEISCkMND0MngjoDAToWBrmJJ24BA0IKB4kpJ0cBvzoVCA5jUUIFBUMTHptCDgljQQAh+QQJCgA9ACwAAAAAFAAUAIUSEhIUFBQVFRUdHR0eHh4fHx8hISEiIiIjIyMpKSksLCwtLS0vLy82NjY6Ojo/Pz9BQUFISEhUVFRWVlZkZGRmZmZtbW1xcXFzc3N8fHx/f3+Hh4eJiYmLi4uMjIyQkJCUlJSYmJidnZ2enp6jo6Orq6u2tra3t7e4uLi5ubm6urq7u7u8vLy/v7/AwMDCwsLDw8PExMTGxsbHx8fIyMjKysrLy8vOzs7Q0NDU1NTV1dXX19fZ2dn///8AAAAAAAAGmsCecDiU3YhIIu8oPJ2Er1dy+Frhms/eSjoVbrG9ard4Ojp3KxmVB20NWzVibdeTrazQu4w+bZ1eTFRpXTWBSHxjRDdOTomMJzIyj45OK4aJWl0vcVMkHh8lii8nblMyIh0dIUI4ekIQRBgSQx+rXkMNARgHAz0bDhWYAAo9A709E7BjCQFCvEIaD8FdCsQ9CAdDGiKYQhYRY0EAIfkECQoAPQAsAAAAABQAFACFCgoKEBAQERERKCgoKioqLCwsLi4uNTU1NjY2Nzc3Ojo6PDw8PT09Pj4+QEBAQ0NDRERESUlJUVFRWlpaW1tbYWFhYmJiZWVlfHx8goKChoaGh4eHioqKjIyMlZWVmZmZnp6en5+foaGhp6enr6+vsrKys7Oztra2t7e3uLi4ubm5urq6u7u7v7+/wMDAwsLCw8PDxMTExcXFxsbGyMjIysrKy8vLzs7O0NDQ1NTU1dXV19fX2dnZ////AAAAAAAABpjAnnA4nN2ISCLvKEShhK9Xcvhi4ZrPHks6FW6xvWq3iDo6d6wZlQdtDVs1Ym3Xm7Gs0PuMPm2hXkxUaV01gUh8Y0Q3Tk6JjCgzM4+OjIaJPYhIFg+EW4YXAwADXTt2Xz0UAgIKPSITRCMeb1wZnEISBh0KBz0mGiGXBg09B7w9HxqJDQZCxU0cwF0QEUINrEIkapc9GK9dQQAh+QQJCgA8ACwAAAAAFAAUAIUCAgIDAwMEBAQGBgYHBwcJCQkiIiIoKCgrKys0NDQ+Pj4/Pz9ERERFRUVNTU1SUlJTU1NUVFRVVVVWVlZcXFxjY2Nubm5xcXF0dHR4eHiDg4OEhISFhYWHh4eJiYmRkZGWlpabm5ulpaWqqqq2tra3t7e4uLi5ubm6urq7u7u/v7/AwMDCwsLDw8PExMTFxcXGxsbIyMjKysrLy8vOzs7Pz8/Q0NDU1NTV1dXX19fY2NjZ2dn///8AAAAAAAAAAAAGlUCecDiE0YhI4u4oLJWELFZyyErZmk9eSjoVbrG8ardYOjpzKRh1B1UNVTKiLMeDpazQO4w+VZVYTFRpXTKBSGxjSBAFAAADiU5OMAkDA42QkYaJPHxJGRWEW4YYCwYLXTl2XzwWCAcRPCIXcm5CKlwgEEMUDR8dGjw0g4kNsL95iQ4NQsfBq1MRsDweHkM2iJsjIWNBACH5BAkKADkALAAAAAAUABQAhQICAgMDAwQEBAcHBwgICAkJCRISEhQUFBYWFiIiIisrKy8vLzQ0NDU1NTo6Oj8/P0FBQVJSUldXV2VlZW1tbX9/f4ODg4iIiImJiYyMjJGRkZSUlJWVlZeXl52dnZ6enqOjo7a2tre3t7i4uLm5ubq6uru7u7+/v8DAwMLCwsPDw8TExMXFxcbGxsfHx8jIyMrKysvLy87OztDQ0NTU1NXV1dfX19jY2NnZ2f///wAAAAAAAAAAAAAAAAAAAAAAAAaYwJxwOGzJiEgi7igUiYQoVHKIOs2az9xIOhVusblqtzg6Om2nVhEnXCSGJxgRZsu1RqNrbnEwNDhdJ1t6Q3wQXTBMSRZjSREEAgIEjU5OLQ2RAgCUTnmNSHVTFxSIW4o5FhIOEV04dydcFQ8QE3YgcydUXB+1Qh8ZeE8yI2qNF4BOUCONGhlgOTOwYx23OclCM2yfOTLFU0EAIfkECQoAPgAsAAAAABQAFACFCgoKEBAQERERJycnKioqLCwsLi4uNDQ0NTU1NjY2Nzc3OTk5Ojo6PDw8PT09Pj4+Pz8/Q0NDRERESUlJUVFRWFhYYWFhYmJiZWVlfHx8goKChoaGioqKi4uLjY2NkZGRlZWVnp6eoaGhp6enr6+vsbGxs7Oztra2t7e3uLi4ubm5urq6u7u7v7+/wMDAwsLCw8PDxMTExcXFxsbGyMjIysrKy8vLzs7O0NDQ1NTU1dXV19fX2NjY2dnZ////AAAABplAn3A4nN2ISKLmMkShhDBYcvgIYIRO4ao1HQYI2Cds1R0yAEznbjUbwnpCCWM4kBBrO99stTr6JgYGFCJdLSgwflQGFV01iUgeZUkZDwcMc2VOTjMXDAefkpooj5I+eVMmI40riEQmHxsgXTt7rEIkHBwhpjV3XEItUnq7Qns7WTdspbZZPi1kZc9hQji2XVHT1HClPjdtXUEAOw==);background-image:url(http://wiki.oni2.net/w/skins/common/images/spinner.gif?2012-08-30T22:25:00Z)!ie;background-position:center center;background-repeat:no-repeat}  h1:lang(as),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ml),h1:lang(mr),h1:lang(or),h1:lang(pa),h1:lang(sa),h1:lang(ta),h1:lang(te){line-height:1.5em !important}h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te){line-height:1.2em} ol:lang(bcc) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(mzn) li{list-style-type:-moz-persian;list-style-type:persian}ol:lang(ckb) li{list-style-type:-moz-arabic-indic;list-style-type:arabic-indic}ol:lang(as) li,ol:lang(bn) li{list-style-type:-moz-bengali;list-style-type:bengali}ol:lang(or) li{list-style-type:-moz-oriya;list-style-type:oriya}#toc ul,.toc ul{margin:.3em 0}  .mw-content-ltr .toc ul,.mw-content-ltr #toc ul,.mw-content-rtl .mw-content-ltr .toc ul,.mw-content-rtl .mw-content-ltr #toc ul{text-align:left} .mw-content-rtl .toc ul,.mw-content-rtl #toc ul,.mw-content-ltr .mw-content-rtl .toc ul,.mw-content-ltr .mw-content-rtl #toc ul{text-align:right} .mw-content-ltr .toc ul ul,.mw-content-ltr #toc ul ul,.mw-content-rtl .mw-content-ltr .toc ul ul,.mw-content-rtl .mw-content-ltr #toc ul ul{margin:0 0 0 2em} .mw-content-rtl .toc ul ul,.mw-content-rtl #toc ul ul,.mw-content-ltr .mw-content-rtl .toc ul ul,.mw-content-ltr .mw-content-rtl #toc ul ul{margin:0 2em 0 0}#toc #toctitle,.toc #toctitle,#toc .toctitle,.toc .toctitle{direction:ltr} .mw-help-field-hint{display:none;margin-left:2px;margin-bottom:-8px;padding:0 0 0 15px;background-image:url(data:image/gif;base64,R0lGODlhCwALALMAAP///01NTZOTk1lZWefn57i4uJSUlPPz82VlZdDQ0HFxcaysrNvb28TExAAAAAAAACH5BAAAAAAALAAAAAALAAsAAAQrUIRJqQQ455nNNBgHJANBDAwgZsVwqIG2IEQYYwXy2lq/Kg3NqqeSVCqCCAA7);background-image:url(http://wiki.oni2.net/w/skins/common/images/help-question.gif?2012-08-30T22:25:00Z)!ie;background-position:left center;background-repeat:no-repeat;cursor:pointer;font-size:.8em;text-decoration:underline;color:#0645ad}.mw-help-field-hint:hover{background-image:url(data:image/gif;base64,R0lGODlhCwALALMAAAtop+7z+GCWwpW51oStz8rb6yZzrafF3bnR5Nzn8QBcoD91oABQmf///wAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjAyODAxMTc0MDcyMDY4MTE5NkQ0QUQzRjI0NzRCNUQwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBN0FFQTQwQjlGQzExREY5RDlBQTRBODQyMkJCMkFDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBN0FFQTNGQjlGQzExREY5RDlBQTRBODQyMkJCMkFDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkM3RjExNzQwNzIwNjgxMTk1RkVBQ0ZBOEQxNTU5MkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDI4MDExNzQwNzIwNjgxMTk2RDRBRDNGMjQ3NEI1RDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQAAAAAACwAAAAACwALAAAEK3CxSalsOOeZxRQY1yBKkihFI2aDEqiMRgBJGGMD8NpavxoHzaqnklQqiwgAOw==);background-image:url(http://wiki.oni2.net/w/skins/common/images/help-question-hover.gif?2012-08-30T22:25:00Z)!ie}.mw-help-field-data{display:block;background-color:#d6f3ff;padding:5px 8px 4px 8px;border:1px solid #5dc9f4;margin-left:20px}.tipsy{padding:5px 5px 10px;font-size:12px;position:absolute;z-index:100000;overflow:visible}.tipsy-inner{padding:5px 8px 4px 8px;background-color:#d6f3ff;color:black;border:1px solid #5dc9f4;max-width:300px;text-align:left}.tipsy-arrow{position:absolute;background:url(data:image/gif;base64,R0lGODlhDQANAMQAAPf399bz/9vu9m/O9NXy/8Pm9svp9pfd+YLW943X9LTn++z093XQ9WnM9OLw9p/c9YTU9InY9/T292DK9Jre+afj+rvq/Nzv9rjk9brl9cPt/ZLb+GbL9MLs/ZHb+KLh+iH5BAAAAAAALAAAAAANAA0AAAVK4BGMZBkcg2WW1lBEKxkVAFTFFQQAwkSYhIlgB3hQTJQHEbBodEiaxmIJyHhIGwwVIGEoAgqGZAswIAIIA3mX+CTWOwfHAd9dtiEAOw==) no-repeat top left;background:url(http://wiki.oni2.net/w/skins/common/images/tipsy-arrow.gif?2012-08-30T22:25:00Z) no-repeat top left!ie;width:13px;height:13px}.tipsy-se .tipsy-arrow{bottom:-2px;right:10px;background-position:0% 100%}#mw-clearyourcache,#mw-sitecsspreview,#mw-sitejspreview,#mw-usercsspreview,#mw-userjspreview{direction:ltr;unicode-bidi:embed} .diff-currentversion-title,.diff{direction:ltr;unicode-bidi:embed} .diff-contentalign-right td{direction:rtl;unicode-bidi:embed} .diff-contentalign-left td{direction:ltr;unicode-bidi:embed}.diff-otitle,.diff-ntitle,.diff-lineno{direction:ltr !important;unicode-bidi:embed}#mw-revision-info,#mw-revision-info-current,#mw-revision-nav{direction:ltr;display:inline}  div.tright,div.floatright,table.floatright{clear:right;float:right} div.tleft,div.floatleft,table.floatleft{float:left;clear:left}div.floatright,table.floatright,div.floatleft,table.floatleft{position:relative} #mw-credits a{unicode-bidi:embed} .mw-jump,#jump-to-nav{overflow:hidden;height:0;zoom:1; } .xdebug-error{position:absolute;z-index:99}}@media screen{  a{text-decoration:none;color:#0645ad;background:none}a:visited{color:#0b0080}a:active{color:#faa700}a:hover,a:focus{text-decoration:underline}a.stub{color:#772233}a.new,#p-personal a.new{color:#ba0000}a.new:visited,#p-personal a.new:visited{color:#a55858} .mw-body a.extiw,.mw-body a.extiw:active{color:#36b}.mw-body a.extiw:visited{color:#636}.mw-body a.extiw:active{color:#b63} .mw-body a.external{color:#36b}.mw-body a.external:visited{color:#636; }.mw-body a.external:active{color:#b63} img{border:none;vertical-align:middle}hr{height:1px;color:#aaa;background-color:#aaa;border:0;margin:.2em 0} h1,h2,h3,h4,h5,h6{color:black;background:none;font-weight:normal;margin:0;overflow:hidden;padding-top:.5em;padding-bottom:.17em;border-bottom:1px solid #aaa;width:auto}h1{font-size:188%}h1 .editsection{font-size:53%}h2{font-size:150%}h2 .editsection{font-size:67%}h3,h4,h5,h6{border-bottom:none;font-weight:bold}h3{font-size:132%}h3 .editsection{font-size:76%;font-weight:normal}h4{font-size:116%}h4 .editsection{font-size:86%;font-weight:normal}h5{font-size:100%}h5 .editsection{font-weight:normal}h6{font-size:80%}h6 .editsection{font-size:125%;font-weight:normal} h1,h2{margin-bottom:.6em}h3,h4,h5{margin-bottom:.3em}p{margin:.4em 0 .5em 0;line-height:1.5em}p img{margin:0}ul{line-height:1.5em;list-style-type:square;margin:.3em 0 0 1.6em;padding:0}ol{line-height:1.5em;margin:.3em 0 0 3.2em;padding:0;list-style-image:none}li{margin-bottom:.1em}dt{font-weight:bold;margin-bottom:.1em}dl{margin-top:.2em;margin-bottom:.5em}dd{line-height:1.5em;margin-left:1.6em;margin-bottom:.1em}q{font-family:Times,"Times New Roman",serif;font-style:italic} pre,code,tt,kbd,samp{ font-family:monospace,Courier}code{background-color:#f9f9f9}pre{padding:1em;border:1px dashed #2f6fab;color:black;background-color:#f9f9f9} table{font-size:100%} fieldset{border:1px solid #2f6fab;margin:1em 0 1em 0;padding:0 1em 1em;line-height:1.5em}fieldset.nested{margin:0 0 0.5em 0;padding:0 0.5em 0.5em}legend{padding:.5em;font-size:95%}form{border:none;margin:0}textarea{width:100%;padding:.1em}select{vertical-align:top} .center{width:100%;text-align:center}*.center *{margin-left:auto;margin-right:auto} .small{font-size:94%}table.small{font-size:100%}  #toc,.toc,.mw-warning{border:1px solid #aaa;background-color:#f9f9f9;padding:5px;font-size:95%}#toc h2,.toc h2{display:inline;border:none;padding:0;font-size:100%;font-weight:bold}#toc #toctitle,.toc #toctitle,#toc .toctitle,.toc .toctitle{text-align:center}#toc ul,.toc ul{list-style-type:none;list-style-image:none;margin-left:0;padding:0;text-align:left}#toc ul ul,.toc ul ul{margin:0 0 0 2em}#toc .toctoggle,.toc .toctoggle{font-size:94%}.toccolours{border:1px solid #aaa;background-color:#f9f9f9;padding:5px;font-size:95%} .mw-warning{margin-left:50px;margin-right:50px;text-align:center} div.floatright,table.floatright{margin:0 0 .5em .5em;border:0}div.floatright p{font-style:italic}div.floatleft,table.floatleft{margin:0 .5em .5em 0;border:0}div.floatleft p{font-style:italic} div.thumb{margin-bottom:.5em;width:auto;background-color:transparent}div.thumbinner{border:1px solid #ccc;padding:3px !important;background-color:#f9f9f9;font-size:94%;text-align:center;overflow:hidden}html .thumbimage{border:1px solid #ccc}html .thumbcaption{border:none;text-align:left;line-height:1.4em;padding:3px !important;font-size:94%}div.magnify{float:right;border:none !important;background:none !important}div.magnify a,div.magnify img{display:block;border:none !important;background:none !important}div.tright{margin:.5em 0 1.3em 1.4em}div.tleft{margin:.5em 1.4em 1.3em 0}img.thumbborder{border:1px solid #dddddd} #userlogin,#userloginForm{border:solid 1px #cccccc;padding:1.2em;margin:.5em;float:left}  .catlinks{border:1px solid #aaa;background-color:#f9f9f9;padding:5px;margin-top:1em;clear:both} .usermessage{background-color:#ffce7b;border:1px solid #ffa500;color:black;font-weight:bold;margin:2em 0 1em;padding:.5em 1em;vertical-align:middle} #siteNotice{position:relative;text-align:center;margin:0}#localNotice{margin-bottom:0.9em} .firstHeading,#firstHeading{margin-bottom:.1em; line-height:1.2em;padding-bottom:0} #siteSub{display:none}#jump-to-nav{ margin-top:-1.4em;margin-bottom:1.4em }#contentSub,#contentSub2{font-size:84%;line-height:1.2em;margin:0 0 1.4em 1em;color:#7d7d7d;width:auto}span.subpages{display:block}  html,body{height:100%;margin:0;padding:0;font-family:sans-serif;font-size:1em}body{background-color:#f3f3f3;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABRJREFUeF4FwTEBAAAAwJD1D+weGQD4APc0a6VeAAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/page-base.png?2012-08-30T22:25:00Z)!ie} div#content{margin-left:10em;padding:1em;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeF4FwTEBAAAAgjD7FzESWfjYdgwEoAJ4lTsaxgAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/border.png?2012-08-30T22:25:00Z)!ie;background-position:top left;background-repeat:repeat-y;background-color:white;color:black;direction:ltr} #mw-page-base{height:5em;background-color:white;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADpJREFUeF5VjUkOAEAIwoD//7lzGJd4MJHGSoBImkFETP67CdLldUd7KC6f8fv3+psd8znbtU5x354HaWQjOx76v7MAAAAASUVORK5CYII=);background-image:url(http://wiki.oni2.net/w/skins/vector/images/page-fade.png?2012-08-30T22:25:00Z)!ie;background-position:bottom left;background-repeat:repeat-x}#mw-head-base{margin-top:-5em;margin-left:10em;height:5em;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeF4FwTEBAAAAgjD7FzESWfjYdgwEoAJ4lTsaxgAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/border.png?2012-08-30T22:25:00Z)!ie;background-position:bottom left;background-repeat:repeat-x}div#mw-head{position:absolute;top:0;right:0;width:100%}div#mw-head h5{margin:0;padding:0} div.emptyPortlet{display:none} #p-personal{position:absolute;top:0;right:0.75em}#p-personal h5{display:none}#p-personal ul{list-style:none;margin:0;padding-left:10em; } #p-personal li{line-height:1.125em;float:left} #p-personal li{margin-left:0.75em;margin-top:0.5em;font-size:0.75em;white-space:nowrap} #left-navigation{position:absolute;left:10em;top:2.5em}#right-navigation{float:right;margin-top:2.5em} div.vectorTabs h5,div.vectorMenu h5 span{display:none}  div.vectorTabs{float:left;height:2.5em}div.vectorTabs{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeF5lTtEKgEAMMv//j/O0IxlH9CA6N2WURAA/OHl5GeWAwUUHBcKV795FtTePxpmV3t9uv8Z3/cmvM88vzbbrAV/dQdX+eas3AAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-break.png?2012-08-30T22:25:00Z)!ie;background-position:bottom left;background-repeat:no-repeat;padding-left:1px} div.vectorTabs ul{float:left}div.vectorTabs ul{height:100%;list-style:none;margin:0;padding:0} div.vectorTabs ul li{float:left} div.vectorTabs ul li{line-height:1.125em;display:inline-block;height:100%;margin:0;padding:0;background-color:#f3f3f3;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAIAAADITs03AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeF7litsRACAMwrD77+Q0rtGoV98r+MEFchhgkr4NnZyb3bk/LM/yMCjiH4wots/++hYR3iXLJVWUBS1AtOi2fwAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-normal-fade.png?2012-08-30T22:25:00Z)!ie;background-position:bottom left;background-repeat:repeat-x;white-space:nowrap} div.vectorTabs ul > li{display:block}div.vectorTabs li.selected{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkAQAAAABvV2fNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeF7dwQEBAAAAQCDTTfdD4WOJ5TIB3ib9EgAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-current-fade.png?2012-08-30T22:25:00Z)!ie} div.vectorTabs li a{display:inline-block;height:1.9em;padding-left:0.5em;padding-right:0.5em;color:#0645ad;cursor:pointer;font-size:0.8em} div.vectorTabs li > a{display:block}div.vectorTabs li.icon a{background-position:bottom right;background-repeat:no-repeat} div.vectorTabs span a{display:inline-block;padding-top:1.25em}  div.vectorTabs span > a{float:left;display:block}div.vectorTabs span{display:inline-block;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeF5lTtEKgEAMMv//j/O0IxlH9CA6N2WURAA/OHl5GeWAwUUHBcKV795FtTePxpmV3t9uv8Z3/cmvM88vzbbrAV/dQdX+eas3AAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-break.png?2012-08-30T22:25:00Z)!ie;background-position:bottom right;background-repeat:no-repeat}div.vectorTabs li.selected a,div.vectorTabs li.selected a:visited{color:#333333;text-decoration:none}div.vectorTabs li.new a,div.vectorTabs li.new a:visited{color:#a55858}  div.vectorMenu{direction:ltr;float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAQCAMAAAAlM38UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFsbGxmpqa3d3deXl58/n79CzHcQAAAAV0Uk5T/////wD7tg5TAAAAMklEQVR42mJgwQoYBkqYiZEZAhiZUFRDxWGicEPA4nBRhNlAcYQokpVMDEwD6kuAAAMAyGMFQVv5ldcAAAAASUVORK5CYII=);background-image:url(http://wiki.oni2.net/w/skins/vector/images/arrow-down-icon.png?2012-08-30T22:25:00Z)!ie;background-position:100% 60%;background-repeat:no-repeat;cursor:pointer}div.vectorMenuFocus{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAQBAMAAADgw5IVAAAAAXNSR0IArs4c6QAAABVQTFRFmpqakpKSra2tsbGxv7+/3d3d4+PjZlmM5AAAAAF0Uk5TAEDm2GYAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAmSURBVAjXY2CgGmBTFBQUVINykgQFhRIQEmpwVUlwYaCEG8WWAgARKQL1ECU8IAAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/arrow-down-focus-icon.png?2012-08-30T22:25:00Z)!ie;background-position:100% 60%} body.rtl div.vectorMenu{direction:rtl}  div#mw-head div.vectorMenu h5{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeF5lTtEKgEAMMv//j/O0IxlH9CA6N2WURAA/OHl5GeWAwUUHBcKV795FtTePxpmV3t9uv8Z3/cmvM88vzbbrAV/dQdX+eas3AAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-break.png?2012-08-30T22:25:00Z)!ie;background-repeat:no-repeat} div#mw-head div.vectorMenu h5{background-position:bottom left;margin-left:-1px} div#mw-head div.vectorMenu > h5{background-image:none}div#mw-head div.vectorMenu h4{display:inline-block;float:left;font-size:0.8em;padding-left:0.5em;padding-top:1.375em;font-weight:normal;border:none}  div.vectorMenu h5 a{display:inline-block;width:24px;height:2.5em;text-decoration:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeF5lTtEKgEAMMv//j/O0IxlH9CA6N2WURAA/OHl5GeWAwUUHBcKV795FtTePxpmV3t9uv8Z3/cmvM88vzbbrAV/dQdX+eas3AAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-break.png?2012-08-30T22:25:00Z)!ie;background-repeat:no-repeat} div.vectorMenu h5 a{background-position:bottom right} div.vectorMenu h5 > a{display:block}div.vectorMenu div.menu{position:relative;display:none;clear:both;text-align:left}  body.rtl div.vectorMenu div.menu{margin-left:24px}  body.rtl div.vectorMenu > div.menu{margin-left:auto}   body.rtl div.vectorMenu > div.menu,x:-moz-any-link{margin-left:23px} div.vectorMenu:hover div.menu,div.vectorMenu div.menuForceShow{display:block}div.vectorMenu ul{position:absolute;background-color:white;border:solid 1px silver;border-top-width:0;list-style:none;list-style-image:none;list-style-type:none;padding:0;margin:0;margin-left:-1px;text-align:left} div.vectorMenu ul,x:-moz-any-link{min-width:5em} div.vectorMenu ul,x:-moz-any-link,x:default{min-width:0}div.vectorMenu li{padding:0;margin:0;text-align:left;line-height:1em} div.vectorMenu li a{display:inline-block;padding:0.5em;white-space:nowrap;color:#0645ad;cursor:pointer;font-size:0.8em} div.vectorMenu li > a{display:block}div.vectorMenu li.selected a,div.vectorMenu li.selected a:visited{color:#333333;text-decoration:none} #p-search h5{display:none} #p-search{float:left}#p-search{margin-right:0.5em;margin-left:0.5em}#p-search form,#p-search input{margin:0;margin-top:0.4em}div#simpleSearch{display:block;width:14em;height:1.4em;margin-top:0.65em;position:relative;min-height:1px; border:solid 1px #AAAAAA;color:black;background-color:white;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAIAAABY/YLgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACZJREFUeF5diqERACAQgID95/3s+cFg4CDQzASkXl4jidvrCPzfA7puAx52W1pnAAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/search-fade.png?2012-08-30T22:25:00Z)!ie;background-position:top left;background-repeat:repeat-x}div#simpleSearch label{ font-size:13px;top:0.25em;direction:ltr}div#simpleSearch input{color:black;direction:ltr}div#simpleSearch input:focus{outline:none}div#simpleSearch input.placeholder{color:#999999}div#simpleSearch input::-webkit-input-placeholder{color:#999999}div#simpleSearch input#searchInput{position:absolute;top:0;left:0;width:90%;margin:0;padding:0;padding-left:0.2em;padding-top:0.2em;padding-bottom:0.2em;outline:none;border:none; font-size:13px;background-color:transparent;direction:ltr}div#simpleSearch button#searchButton{position:absolute;width:10%;right:0;top:0;padding:0;padding-top:0.3em;padding-bottom:0.2em;padding-right:0.4em;margin:0;border:none;cursor:pointer;background-color:transparent;background-image:none} div#simpleSearch button#searchButton img{border:none;margin:0;margin-top:-3px;padding:0} div#simpleSearch button#searchButton > img{margin:0} div#mw-panel{position:absolute;top:160px;padding-top:1em;width:10em;left:0}div#mw-panel div.portal{padding-bottom:1.5em;direction:ltr}div#mw-panel div.portal h5{font-weight:normal;color:#444444;padding:0.25em;padding-top:0;padding-left:1.75em;cursor:default;border:none;font-size:0.75em}div#mw-panel div.portal div.body{margin:0;padding-top:0.5em;margin-left:1.25em;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAAAAAAphRnkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeF61yMEJACAQxMCN/Xfr/yIsaAfOJxC2UTPWS6f5gABhUTedBz7fGPSonIP/AAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/portal-break.png?2012-08-30T22:25:00Z)!ie;background-repeat:no-repeat;background-position:top left}div#mw-panel div.portal div.body ul{list-style:none;list-style-image:none;list-style-type:none;padding:0;margin:0}div#mw-panel div.portal div.body ul li{line-height:1.125em;padding:0;padding-bottom:0.5em;margin:0;overflow:hidden;font-size:0.75em}div#mw-panel div.portal div.body ul li a{color:#0645ad}div#mw-panel div.portal div.body ul li a:visited{color:#0b0080} div#footer{margin-left:10em;margin-top:0;padding:0.75em;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeF4FwTEBAAAAgjD7FzESWfjYdgwEoAJ4lTsaxgAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/border.png?2012-08-30T22:25:00Z)!ie;background-position:top left;background-repeat:repeat-x;direction:ltr}div#footer ul{list-style:none;list-style-image:none;list-style-type:none;margin:0;padding:0}div#footer ul li{margin:0;padding:0;padding-top:0.5em;padding-bottom:0.5em;color:#333333;font-size:0.7em}div#footer #footer-icons{float:right} body.ltr div#footer #footer-places{float:left}div#footer #footer-info li{line-height:1.4em}div#footer #footer-icons li{float:left;margin-left:0.5em;line-height:2em;text-align:right}div#footer #footer-places li{float:left;margin-right:1em;line-height:2em} #p-logo{position:absolute;top:-160px;left:0;width:10em;height:160px}#p-logo a{display:block;width:10em;height:160px;background-repeat:no-repeat;background-position:center center;text-decoration:none}  #preftoc{ width:100%;float:left;clear:both;margin:0 !important;padding:0 !important;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAhCAQAAACysAk0AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAABAAAAIQBSEXtPAAAAAmJLR0QA/vCI/CkAAAAmSURBVAjXY2BgYPj3n+k/AwL9g5Fwxl8GJgYGpr+ogmgITQuSgQA1QiAL/go8LAAAACV0RVh0Y3JlYXRlLWRhdGUAMjAwOS0wOC0wOVQxOTowNTo0MSswMDowMCYO2tEAAAAldEVYdG1vZGlmeS1kYXRlADIwMDktMDgtMDlUMTk6MDU6NDErMDA6MDB5v6zlAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/preferences-break.png?2012-08-30T22:25:00Z)!ie;background-position:bottom left;background-repeat:no-repeat}#preftoc li{ float:left;margin:0;padding:0;padding-right:1px;height:2.25em;white-space:nowrap;list-style-type:none;list-style-image:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAhCAQAAACysAk0AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAABAAAAIQBSEXtPAAAAAmJLR0QA/vCI/CkAAAAmSURBVAjXY2BgYPj3n+k/AwL9g5Fwxl8GJgYGpr+ogmgITQuSgQA1QiAL/go8LAAAACV0RVh0Y3JlYXRlLWRhdGUAMjAwOS0wOC0wOVQxOTowNTo0MSswMDowMCYO2tEAAAAldEVYdG1vZGlmeS1kYXRlADIwMDktMDgtMDlUMTk6MDU6NDErMDA6MDB5v6zlAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==);background-image:url(http://wiki.oni2.net/w/skins/vector/images/preferences-break.png?2012-08-30T22:25:00Z)!ie;background-position:bottom right;background-repeat:no-repeat} #preftoc li:first-child{margin-left:1px}#preftoc a,#preftoc a:active{display:inline-block;position:relative;color:#0645ad;padding:0.5em;text-decoration:none;background-image:none;font-size:0.9em}#preftoc a:hover,#preftoc a:focus{text-decoration:underline}#preftoc li.selected a{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAhCAQAAACysAk0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeF5twskJAAAMAjD3H7mXfYogCQiQeun68Z2WPk0SQHDa/pxXAAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/preferences-fade.png?2012-08-30T22:25:00Z)!ie;background-position:bottom;background-repeat:repeat-x;color:#333333;text-decoration:none}#preferences{float:left;width:100%;margin:0;margin-top:-2px;clear:both;border:solid 1px #cccccc;background-color:#f9f9f9;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABRJREFUeF4FwTEBAAAAwJD1j+waGQD8APvyfoZlAAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/preferences-base.png?2012-08-30T22:25:00Z)!ie}#preferences fieldset{border:none;border-top:solid 1px #cccccc}#preferences fieldset.prefsection{border:none;padding:0;margin:1em}#preferences legend{color:#666666}#preferences fieldset.prefsection legend.mainLegend{display:none}#preferences td{padding-left:0.5em;padding-right:0.5em}#preferences td.htmlform-tip{font-size:x-small;padding:.2em 2em;color:#666666}#preferences div.mw-prefs-buttons{padding:1em}#preferences div.mw-prefs-buttons input{margin-right:0.25em} div#content{line-height:1.5em}#bodyContent{font-size:0.8em}.editsection{float:right}ul{list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAANCAMAAABW4lS6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFAFKM////QIUK9QAAAAJ0Uk5T/wDltzBKAAAAGklEQVR42mJgBAEGokgGBjBGBxBxsBqAAAMACHwALd5r8ygAAAAASUVORK5CYII=);list-style-image:url(http://wiki.oni2.net/w/skins/vector/images/bullet-icon.png?2012-08-30T22:25:00Z)!ie}pre{line-height:1.3em} #siteNotice{font-size:0.8em}#firstHeading{padding-top:0;margin-top:0;padding-top:0;font-size:1.6em}div#content a.external,div#content a.external[href ^="gopher://"]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/external-link-ltr-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href ^="https://"],.link-https{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeF6tjzsKg0AQhi09mimsFJLCzpNYCGKbK3gAtfUIljaCoKCCZIs8MMV2v+yCg8siWlh8zOtjhjEAEFmeIopDQtTrTJNEZIxhWysiNfULJFJjDzGnba/aBt4+wAuBzD+tg6a8SVkXf4GET96xmDxNzP39IvE/PPDtXIyVpYinv14A5F0laJ8oYFgAAAAASUVORK5CYII=) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/lock-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href ^="mailto:"],.link-mailto{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKBAMAAAB/HNKOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRF////////iIqF9vb26urpycfDvb275eXj2djV+/v4srKy6efio6GcqKejsa6q8fDtVM9qIQAAAAF0Uk5TAEDm2GYAAABOSURBVHheBcExDkAwGIDRL43NpJOt6a9hMdVilP8gklqsHMJmt4qeyeI03oNSNkCrAIU/7YTWbwp0zz4rTXZHxF/9YA15HTG4+4NFRNofUBMMOBBNZngAAAAASUVORK5CYII=) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/mail-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href ^="news:"]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHtJREFUeF6NkEEKgCAQRT2w1wiiUxgk0SKiTe6i9oKeQXDhKSZmYAJRKeHh4j//DIp+6OAPJH6cXJRSZqSUQClViBjUKER8zXAbUhev+6Q7hMA0G1msNtIo5zxhrX3xzlNG4ravYMwBMUZsKsBsXjQIABCTHlsfTXuj8wCN3T2QBjtcwQAAAABJRU5ErkJggg==) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/news-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href ^="ftp://"],.link-ftp{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAExJREFUeF5VyEEKwCAMAMH83o/0LT6kFHqQYqkevG1jIITs3kaQgn+A7A29ujnw5NKrsaPCrTegBBrRMzYeXkbGzsdkZRwsPWMUmEd+CkSgVeVp2OkAAAAASUVORK5CYII=) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/file-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href ^="irc://"],div#content a.external[href ^="ircs://"],.link-irc{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHRJREFUeF590E0KgCAQBWAvH0TXigI3ZccQ/8H91ExqKNrAW8j7kFG27SvMyzQM9s8whuBnENdQSllFKdWFWFC01pQQwhASMMaAtXYIMQScc/0dxSXyIaPq1ZzzF6JOsKBTHOC9hxgjoQLbf2tRgekWKka5AShBSepvauUSAAAAAElFTkSuQmCC) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/talk-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href $=".ogg"],div#content a.external[href $=".OGG"],div#content a.external[href $=".mid"],div#content a.external[href $=".MID"],div#content a.external[href $=".midi"],div#content a.external[href $=".MIDI"],div#content a.external[href $=".mp3"],div#content a.external[href $=".MP3"],div#content a.external[href $=".wav"],div#content a.external[href $=".WAV"],div#content a.external[href $=".wma"],div#content a.external[href $=".WMA"],.link-audio{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKBAMAAAB/HNKOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRF////dX8qyNF7eYMzwsxrsr9G8PHrm6Jrt7uakJVmn6OB1duat8NQi5YzhI4ykZR07gQraQAAAAF0Uk5TAEDm2GYAAABJSURBVHheNcSxDUBQFIbR727glxvKl3dHsIHCGESrNIIR7KE1hQ1MoDSCiMhJDixSDWVEhuZbei/sf/Jqbdn28+jxYe4u7CaND+p5C05J6bE1AAAAAElFTkSuQmCC) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/audio-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href $=".ogm"],div#content a.external[href $=".OGM"],div#content a.external[href $=".avi"],div#content a.external[href $=".AVI"],div#content a.external[href $=".mpeg"],div#content a.external[href $=".MPEG"],div#content a.external[href $=".mpg"],div#content a.external[href $=".MPG"],.link-video{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAAAAACoWZBhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAP9bkSK1AAAAXElEQVR4Xi2NMQoFMQgFvbpgHUj5LvF6K7sFQXKFsOew2G/xuylmGPn62Wb76U+ayHsTbDnrQMNrHdkZRChyi730KvK1QUWVD47gzoCOMBkXPSZrIuumseW/iKU/eKdG9xXBa10AAAAASUVORK5CYII=) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/video-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content a.external[href $=".pdf"],div#content a.external[href $=".PDF"],div#content a.external[href *=".pdf#"],div#content a.external[href *=".PDF#"],div#content a.external[href *=".pdf?"],div#content a.external[href *=".PDF?"],.link-document{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE5JREFUeF5lykEKgDAMBdF/+17Es/QkiosiCBURXIzJooZohmweX6gwmkCeI+Oqc2C1FnvnF2ejlQYU0tLK2NjY6f/l8V12Ti7uhFFgDj19b58EwXuqkAAAAABJRU5ErkJggg==) center right no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/document-icon.png?2012-08-30T22:25:00Z) center right no-repeat!ie;padding-right:13px}div#content .printfooter{display:none} #pt-userpage,#pt-anonuserpage,#pt-login{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAANCAYAAACQN/8FAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxMAAAsTAQCanBgAAAHOSURBVCjPY2BAAjtLxLmPN4pFn2gSTdrfICDAgA2c65C0uznf6erT9dH/H6/0+39zut6d051SfiiK9jcwsFyfa3v21Z7S/++Odf1/uSP7/6OF1v+vT9O7ub9BlAdJoajBw+W+P98crPv/8eLC/6/2lPx/vNj+/705xv+PNwsHwRUerOFTvTXX9sfzjTFg056tC/v/YJbu//tzjP4eaxR3hiv8z8DAuKPF4N7DuUb/H84z/X9/hsb/BzM1/x/qMnxwJo2BFa5QP3rKpMjSiT/XtTr+vzzV+P+Vacb/N7fb/48v6fikHTYhFaxII3iSr0vRmm/muZv++9du/L969Yr/Wzeu+O9Tvvq/Rcay//aZC15reHXoMtimz91ulrnyv1n22v/muRv/960693/Fniv/TdKX/zdKXvDfPHX+f9PYySsYbFJnXDWIm/nfOG0pWDKkdsP/oonbgYoW/jdImPNfL2bKf+v4SRcZTCK6D5gkTAcLGibO/W+aMu+/b8mS//pxM8CKdAPr/xtFdB9lkDQNszOP7r1tnTLzr03qzP/WQGyVAqRTpv+3Tprxzzi88560VZo3xNui2jxi+oFB4oYRNaL6Ic0gDGEHh4HkQEoAjALoHv5slukAAAAASUVORK5CYII=) left top no-repeat;background:url(http://wiki.oni2.net/w/skins/vector/images/user-icon.png?2012-08-30T22:25:00Z) left top no-repeat!ie;padding-left:15px !important;text-transform:none}.redirectText{font-size:140%}.redirectMsg img{vertical-align:text-bottom}#bodyContent{position:relative;width:100%}#mw-js-message{font-size:0.8em}div#bodyContent{line-height:1.5em} #ca-unwatch.icon a,#ca-watch.icon a{margin:0;padding:0;outline:none;display:block;width:26px; padding-top:3.1em;margin-top:0; margin-top:-0.8em !ie;height:0;overflow:hidden;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAQCAMAAAClQEgHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwBQTFRFoNb/+vr52tXLdcP/ltL/ysKt39rPrdz/xtDT8vLwwrJxodr/vqxjzdnr8v7+ntb/uuX/i87/ytTV9fb3zuz+8eOU+fr8zvH/wuX/ecT/hbrnj7XBltb/m9T/h8z/jtH+c8H/vq53lL/Ovq109vb1/v7rx8CuhcT0xLJlot3/2PL/kc//59N3s9//v7KGbL7/mNf//v395NSLmdr//Pz7ccT/wbOIZ7v/ybZk6OzzpNf/icPu0cm2g8n/p9n/9fTzva1ouuL/samQwu3/scfhfrbj8e/q4+bnyLJQ6u3tqtr/irbG7PH5fcz/0d7ww+r/zcuL6Obh9f7/hsv/s8+r+e2rw7J2rb3C+fj2icTy1O7/jrvO1s++vMyUz8zGocna6+rn8vDtlLK8aL3/d8X///vV7fz/vraklMr039nMtNjqp97/o9362ejN4vb/zcN7sN3/vfP/bsD/1dLNhK2+yLeIkrri28drz7tp5N7TiK26grXi3trTccP/vub/rd//+v//qM7fyeHMztmq5PT8u6t0/f3+/P39ksDwk8HQtMTH3fn/kdH/ltLpxb5o0dzsnND6ssXbzun5rdru2+Dh5+vsz9nadrrx1eLz+fLM7/z/w71z//zPgMz/8eWrwtKT9vn8jbPCf7vs1N3pua1terXo1O3tqtfWwOX51cV5dMH/vtmy28p8fLXR4efx9emq///8z9TbzrxowLOP5ea57///nq2xy7xo///5frrnwrSP9PX2+vv7ztzwvd3P2vH5r9z/8/X4nMrlsN//qLq9wa5zh7fikdf/tuL9zbpo3tnQ1u/kx8rL+/z8kq+6+vLGkqKq6f//oMrfxuf8xbVwqLvSh7vq8PP3ltD6d8P/v7Ngx7dqwbFt/PGyk8jv9vf3zLhofqy/wdPqyeTc0vH9//3kxun5i7O/x87X09mr1sRzmK3C3dnQz9XXmLvg///6uc7ozLpq7O7u//zc7evoyfT/+/z+mtf/9e25zcJt7ezowMXGu8nM+Pn5////8/n77InDmQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAJbSURBVHjaYvgPAb+3/ccK4tKxi7+4SkA9A5SWnuyJVSGXDidWcSnN6/jVQw0+s//fBWzqin9scMImvtF/62us6rfwOaEYXPLvXyM2pzn8+7dGBYt4dZ5WhjA29d3i+Sowg/d4TjuX9+9fQwnH1L8oqhIrN5//909VOdPNBEXcZ8Y7CQlHEam9Pt/Q1O/KrXNcdhSsnuFIZ3zWpLR/QMAnkhWvJA1TxVqx0mheKkj883qjVx9LYeIukRkT2P3rCtgPCGTfiLTuQKjPD3iZK1DAzv64OWD27VIG9+h/SOASB0xhwklk8XImmLilOp+IhK6XFQODrCyD+D1euPoHF50FDoPFZWQKfzIx/N/9PAiuP3oKwmOMYU9hwu8tAhHiYteidO34WbRtFZg1d65DVn+6HiJem3MrEBTGZ6taIPqDvN1RwkxxJkRcVeMLivixEwwsgpLmRfKulqjqm/jB4r08vyCp4tMhiAFPOFCj2L4cIh7KhCp+UJ1bjjlZ/6Y8L5r6PmOQuGkIEzS5vV0BMWBWOKrCGlGIeCorqvhieTlm5pRVkgYuaOpj5zLXmiqkLGeFGhwOTBRRl4EmJKEqVJsDdC3Q8B16qOITs4MNegS/B3OXoanf53s8JNbYN0cPanDSPy3vP0JVz/4tRFVo9u+uRcwbZdF/d1DFy8S5Fz3qr5ZxdkVT/3W1Rsyp1vmFS6AGP1TqAolzSK+9j6KQZ5MNiGK64sGIIr7U+gOI4pWaLoaqfjtEPRdIPdDgdiFY5hRCyaWGbDDz2CKQxdv8YOb5LcCtnuE/jQBAgAEAQlFsBT+lqfQAAAAASUVORK5CYII=);background-image:url(http://wiki.oni2.net/w/skins/vector/images/watch-icons.png?2012-08-30T22:25:00Z)!ie}#ca-unwatch.icon a{background-position:-43px 60%}#ca-watch.icon a{background-position:5px 60%}#ca-unwatch.icon a:hover,#ca-unwatch.icon a:focus{background-position:-67px 60%}#ca-watch.icon a:hover,#ca-watch.icon a:focus{background-position:-19px 60%}#ca-unwatch.icon a.loading,#ca-watch.icon a.loading{background-image:url(data:image/gif;base64,R0lGODlhEAAQAMQfANra2uLi4vDw8PLy8ujo6Ozs7NbW1vj4+Pb29s7Oztzc3NTU1O7u7uDg4NHR0erq6v39/d7e3vz8/Pv7+/7+/tPT09jY2Pr6+tnZ2efn5/X19eXl5ebm5vT09P///////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAwAfACwAAAAAEAAQAAAFa+Anjl9QkShacVqabp2XuKjjecHhStrjHDdIgtORiCyWSEZwud0mg0zEUhkYnNhsY/O5OCRZrEEwgvzCkgqZhGiEB1wUgRGeAFKApqcjcJ5QCx4aFQEECX1/JAlJJBsVFRMkEBkXLhyVNJkhACH5BAkDAB8ALAAAAAAQABAAAAV74CeO4hUQZEoGhqGqWzQtEnlYRCYMGSB5BkTKQCgUOBGPkjBIdQDKqBLhaJI4D6l0gylMRg6IVkmhNBIjxWBM8XAwHNFAIdYWDA0SRhNtKy0CJAUVEAcRAQJkFikZDg4EBB0RDR4dGCkIEhAjFBsBDwovKo0BoioFQiMhACH5BAkDAB8ALAAAAAAQABAAAAWB4CeO5HeU33OVl5IIpYEFh/QR1rYNZSMUAYVBwfBYbKRJwwPxFDxQjAbloECvHgMEBUBgPZTApjSxeL+eQGDUsQwkaGhBcUBYinGI5GBIEBwEGhxwVwwLFgoRHQwECgIADRFXBgUfEygfEBEDTmuYIxAJFAYwnyMFABVbpiMYGSghACH5BAkDAB8ALAAAAAAQABAAAAV+4CdKjWieKOJs6De1U5Zhg4YcmaG0kXcElQDtEWkZPMgMBGlofQDIqK9pmhAADClSEDBtAICJROvR7EQGx5LsgQAOogKm0LhQ2IDRQRJRFKIHAh4XAXknEw5REQsRBgAOEigRFBQEERofAgJiKBoZAgsXTicUDgYDoygNXU4hACH5BAUDAB8ALAAAAAAQABAAAAV54Cd+EFBNY6p+hgCssOERGwSP3eZBgUIEG0xhdGFpPMjChjNoRD6XIGBDQVo9FIcogZnsrlbLQNRQfMEewVN0ERAaaE9AoDoECGj76lBBTxQwDlYBEQweGwwqEDIHCwIbBgAAFioUBgUOdCIaBRwrBhUHNykQY6MfIQA7);background-image:url(http://wiki.oni2.net/w/skins/vector/images/watch-icon-loading.gif?2012-08-30T22:25:00Z)!ie;background-position:5px 60%}#ca-unwatch.icon a span,#ca-watch.icon a span{display:none}div.vectorTabs ul{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeF5lTtEKgEAMMv//j/O0IxlH9CA6N2WURAA/OHl5GeWAwUUHBcKV795FtTePxpmV3t9uv8Z3/cmvM88vzbbrAV/dQdX+eas3AAAAAElFTkSuQmCC);background-image:url(http://wiki.oni2.net/w/skins/vector/images/tab-break.png?2012-08-30T22:25:00Z)!ie;background-position:right bottom;background-repeat:no-repeat} .tipsy{font-size:0.8em}}
+
+/* cache key: oni_wiki:resourceloader:filter:minify-css:7:71312b429efcab0364ff9ffe7312ef96 */
Index: s10k/Vago/icon_resource.rc
===================================================================
--- s10k/Vago/icon_resource.rc	(revision 1092)
+++ s10k/Vago/icon_resource.rc	(revision 1092)
@@ -0,0 +1,1 @@
+ IDI_ICON1               ICON    DISCARDABLE     "vago_icon.ico"
Index: s10k/Vago/libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.cpp
===================================================================
--- s10k/Vago/libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.cpp	(revision 1092)
+++ s10k/Vago/libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.cpp	(revision 1092)
@@ -0,0 +1,89 @@
+#include "BasicXMLSyntaxHighlighter.h"
+
+BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QObject * parent) :
+    QSyntaxHighlighter(parent)
+{
+    setRegexes();
+    setFormats();
+}
+
+BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QTextDocument * parent) :
+    QSyntaxHighlighter(parent)
+{
+    setRegexes();
+    setFormats();
+}
+
+BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QTextEdit * parent) :
+    QSyntaxHighlighter(parent)
+{
+    setRegexes();
+    setFormats();
+}
+
+void BasicXMLSyntaxHighlighter::highlightBlock(const QString & text)
+{
+    // Special treatment for xml element regex as we use captured text to emulate lookbehind
+    int xmlElementIndex = m_xmlElementRegex.indexIn(text);
+    while(xmlElementIndex >= 0)
+    {
+        int matchedPos = m_xmlElementRegex.pos(1);
+        int matchedLength = m_xmlElementRegex.cap(1).length();
+        setFormat(matchedPos, matchedLength, m_xmlElementFormat);
+
+        xmlElementIndex = m_xmlElementRegex.indexIn(text, matchedPos + matchedLength);
+    }
+
+    // Highlight xml keywords *after* xml elements to fix any occasional / captured into the enclosing element
+    typedef QList<QRegExp>::const_iterator Iter;
+    Iter xmlKeywordRegexesEnd = m_xmlKeywordRegexes.end();
+    for(Iter it = m_xmlKeywordRegexes.begin(); it != xmlKeywordRegexesEnd; ++it) {
+        const QRegExp & regex = *it;
+        highlightByRegex(m_xmlKeywordFormat, regex, text);
+    }
+
+    highlightByRegex(m_xmlAttributeFormat, m_xmlAttributeRegex, text);
+    highlightByRegex(m_xmlCommentFormat, m_xmlCommentRegex, text);
+    highlightByRegex(m_xmlValueFormat, m_xmlValueRegex, text);
+}
+
+void BasicXMLSyntaxHighlighter::highlightByRegex(const QTextCharFormat & format,
+                                                 const QRegExp & regex, const QString & text)
+{
+    int index = regex.indexIn(text);
+
+    while(index >= 0)
+    {
+        int matchedLength = regex.matchedLength();
+        setFormat(index, matchedLength, format);
+
+        index = regex.indexIn(text, index + matchedLength);
+    }
+}
+
+void BasicXMLSyntaxHighlighter::setRegexes()
+{
+    m_xmlElementRegex.setPattern("<[\\s]*[/]?[\\s]*([^\\n]\\w*)(?=[\\s/>])");
+    m_xmlAttributeRegex.setPattern("\\w+(?=\\=)");
+    m_xmlValueRegex.setPattern("\"[^\\n\"]+\"(?=[\\s/>])");
+    m_xmlCommentRegex.setPattern("<!--[^\\n]*-->");
+
+    m_xmlKeywordRegexes = QList<QRegExp>() << QRegExp("<\\?") << QRegExp("/>")
+                                           << QRegExp(">") << QRegExp("<") << QRegExp("</")
+                                           << QRegExp("\\?>");
+}
+
+void BasicXMLSyntaxHighlighter::setFormats()
+{
+    m_xmlKeywordFormat.setForeground(Qt::blue);
+
+    m_xmlElementFormat.setForeground(Qt::blue);
+
+    m_xmlAttributeFormat.setForeground(Qt::red);
+
+    m_xmlValueFormat.setForeground(QColor(0x8055FF));
+    m_xmlValueFormat.setFontWeight(QFont::Bold);
+
+    m_xmlCommentFormat.setForeground(Qt::gray);
+}
+
Index: s10k/Vago/libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.h
===================================================================
--- s10k/Vago/libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.h	(revision 1092)
+++ s10k/Vago/libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.h	(revision 1092)
@@ -0,0 +1,39 @@
+#ifndef BASIC_XML_SYNTAX_HIGHLIGHTER_H
+#define BASIC_XML_SYNTAX_HIGHLIGHTER_H
+
+#include <QSyntaxHighlighter>
+#include <QTextEdit>
+
+class BasicXMLSyntaxHighlighter : public QSyntaxHighlighter
+{
+    Q_OBJECT
+public:
+    BasicXMLSyntaxHighlighter(QObject * parent);
+    BasicXMLSyntaxHighlighter(QTextDocument * parent);
+    BasicXMLSyntaxHighlighter(QTextEdit * parent);
+
+protected:
+    virtual void highlightBlock(const QString & text);
+
+private:
+    void highlightByRegex(const QTextCharFormat & format,
+                          const QRegExp & regex, const QString & text);
+
+    void setRegexes();
+    void setFormats();
+
+private:
+    QTextCharFormat     m_xmlKeywordFormat;
+    QTextCharFormat     m_xmlElementFormat;
+    QTextCharFormat     m_xmlAttributeFormat;
+    QTextCharFormat     m_xmlValueFormat;
+    QTextCharFormat     m_xmlCommentFormat;
+
+    QList<QRegExp>      m_xmlKeywordRegexes;
+    QRegExp             m_xmlElementRegex;
+    QRegExp             m_xmlAttributeRegex;
+    QRegExp             m_xmlValueRegex;
+    QRegExp             m_xmlCommentRegex;
+};
+
+#endif // BASIC_XML_SYNTAX_HIGHLIGHTER_H
Index: s10k/Vago/libs/DropLineEdit/droplineedit.cpp
===================================================================
--- s10k/Vago/libs/DropLineEdit/droplineedit.cpp	(revision 1092)
+++ s10k/Vago/libs/DropLineEdit/droplineedit.cpp	(revision 1092)
@@ -0,0 +1,49 @@
+#include "DropLineEdit.h"
+
+DropLineEdit::DropLineEdit(QWidget *parent) : QLineEdit(parent)
+{
+    //setDragDropMode(QAbstractItemView::DropOnly);
+    setAcceptDrops(true);
+}
+
+void DropLineEdit::dragEnterEvent(QDragEnterEvent *event) {
+
+    const QMimeData* mimeData = event->mimeData();
+
+    // We only accept if our widget is enabled and it is only one file
+    if(
+            !this->isEnabled() ||
+            mimeData->urls().size() != 1 ||
+            // checks if it is a file (folders are ignored)
+            QDir(mimeData->urls().at(0).toLocalFile()).exists()
+    )
+    {
+        event->ignore();
+    }
+    else{
+        event->acceptProposedAction();
+    }
+}
+
+void DropLineEdit::dragMoveEvent(QDragMoveEvent *event) {
+    event->acceptProposedAction();
+}
+
+void DropLineEdit::dropEvent(QDropEvent *event) {
+
+    const QMimeData* mimeData = event->mimeData();
+
+    event->acceptProposedAction();
+
+    QStringList pathList = QStringList();
+
+    if (mimeData->hasUrls())
+    {
+        this->setText(mimeData->urls().at(0).toLocalFile());
+    }
+
+}
+
+void DropLineEdit::dragLeaveEvent(QDragLeaveEvent *event) {
+    event->accept();
+}
Index: s10k/Vago/libs/DropLineEdit/droplineedit.h
===================================================================
--- s10k/Vago/libs/DropLineEdit/droplineedit.h	(revision 1092)
+++ s10k/Vago/libs/DropLineEdit/droplineedit.h	(revision 1092)
@@ -0,0 +1,21 @@
+#ifndef DROPLINEEDIT_H
+#define DROPLINEEDIT_H
+
+#include <QLineEdit>
+#include <QtWidgets>
+
+class DropLineEdit : public QLineEdit {
+
+    Q_OBJECT
+
+public:
+    DropLineEdit(QWidget *parent = 0);
+
+protected:
+    void dragEnterEvent(QDragEnterEvent *event);
+    void dragMoveEvent(QDragMoveEvent *event);
+    void dragLeaveEvent(QDragLeaveEvent *event);
+    void dropEvent(QDropEvent *event);
+};
+
+#endif // DROPLINEEDIT_H
Index: s10k/Vago/libs/DropTableWidget/droptablewidget.cpp
===================================================================
--- s10k/Vago/libs/DropTableWidget/droptablewidget.cpp	(revision 1092)
+++ s10k/Vago/libs/DropTableWidget/droptablewidget.cpp	(revision 1092)
@@ -0,0 +1,174 @@
+#include "droptablewidget.h"
+
+//Original dn'd from here: http://www.qtcentre.org/threads/17536-Drag-and-Drop-QTableWidget-in-UI-file
+//This constructor also initialize c++ constants (http://stackoverflow.com/questions/1423696/how-to-initialize-a-const-field-in-constructor)
+
+DropTableWidget::DropTableWidget(QWidget *parent, QBrush _disabledBackStyle,
+                                 QBrush _disabledTextStyle) : QTableWidget(parent),
+    disabledBackStyle(_disabledBackStyle),
+    disabledTextStyle(_disabledTextStyle){
+
+    //set widget default properties:
+    //    setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
+    //    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    setEditTriggers(QAbstractItemView::NoEditTriggers);
+    setDragDropMode(QAbstractItemView::DropOnly);
+    setAlternatingRowColors(true);
+    //    setSelectionMode(QAbstractItemView::NoSelection);
+    //    setShowGrid(false);
+    //    setWordWrap(false);
+    setAcceptDrops(true);
+
+    //Custom added for Vago
+    setColumnCount(3);
+
+    //set Header of tables
+    setHorizontalHeaderLabels(QStringList()<<"File/Folder"<<"From/To"<<"Command");
+    horizontalHeader()->setStretchLastSection(true);
+}
+
+void DropTableWidget::dragEnterEvent(QDragEnterEvent *event) {
+    event->acceptProposedAction();
+    emit changed(event->mimeData());
+}
+
+void DropTableWidget::dragMoveEvent(QDragMoveEvent *event) {
+    event->acceptProposedAction();
+}
+
+void DropTableWidget::dropEvent(QDropEvent *event) {
+
+    const QMimeData* mimeData = event->mimeData();
+
+    event->acceptProposedAction();
+
+    QStringList pathList = QStringList();
+
+    // check for our needed mime type, here a file or a list of files
+    if (mimeData->hasUrls())
+    {
+        QList<QUrl> urlList = mimeData->urls();
+
+        // extract the local paths of the files
+        for (int i = 0; i < urlList.size() && i < 2048; ++i)
+        {
+            pathList.append(urlList.at(i).toLocalFile());
+        }
+    }
+
+    emit dropped(this, pathList);
+}
+
+void DropTableWidget::dragLeaveEvent(QDragLeaveEvent *event) {
+    event->accept();
+}
+
+void DropTableWidget::clear() {
+    emit changed();
+}
+
+//Context menu actions
+void DropTableWidget::contextMenuEvent(QContextMenuEvent *event){
+    //All the context menu is processed at the mainwindow class
+    emit dtContextMenu(this,event);
+}
+
+//Custom function to swap items positions in the table
+void DropTableWidget::swapPositions(QList<int> rowsSelected, int numUnitsToMove){
+    QList<tableRowProperties> orderedList = QList<tableRowProperties>();
+
+    //Make a copy of the actual list to swap
+    for(int i=0; i<this->rowCount(); i++){
+        orderedList.append(tableRowProperties()); //Add each row property (initialize)
+        for(int j=0; j<this->columnCount(); j++){
+            orderedList[i].cells.append(this->item(i,j)->text());
+
+            if(this->item(i,j)->background()==this->disabledBackStyle){ //Is it disabled?
+                orderedList[i].isDisabled=true;
+            }
+
+        }
+    }
+
+    //Swap the copied list for each item
+    if(numUnitsToMove<0){ //if going up we need to start from the first item
+        for(int i=0; i<rowsSelected.size(); i++){
+            orderedList.swap(rowsSelected.at(i),rowsSelected.at(i)+numUnitsToMove);
+        }
+    }
+    else{ //if going down we need to start from the last item
+        for(int i=rowsSelected.size()-1; i>=0; i--){
+            orderedList.swap(rowsSelected.at(i),rowsSelected.at(i)+numUnitsToMove);
+        }
+    }
+
+    this->clear(); //clear previous selections
+
+    //Switch with the ordered one
+    for(int i=0; i<this->rowCount(); i++){
+        for(int j=0; j<this->columnCount(); j++){
+            QTableWidgetItem *orderedItem = new QTableWidgetItem(orderedList[i].cells.at(j));
+            this->setItem(i,j,orderedItem);
+
+            if(orderedList[i].isDisabled){ //Restored disabled style
+                setDisableStyleWidgetItem(orderedItem);
+            }
+        }
+        this->updateTableToolTips(i);
+    }
+
+    this->clearSelection(); //clear previous selections
+
+    //Select the moved rows
+    this->setRangeSelected(QTableWidgetSelectionRange(rowsSelected.at(0)+numUnitsToMove,this->columnCount()-1,rowsSelected.at(rowsSelected.size()-1)+numUnitsToMove,0),true);
+    //Top > top row number, Left > num colums to select to left, Bottom > bottom row number, Right > start at each column (from right)
+}
+
+//Reset a item to its initial style
+void DropTableWidget::resetStyleWidgetItem(QTableWidgetItem *currentItem){
+    if((currentItem->row()+1)%2==0){ //if the row number is par it use the alternate color scheme
+        currentItem->setBackground(QPalette().brush(QPalette::Normal,QPalette::AlternateBase));
+    }
+    else{
+        currentItem->setBackground(QPalette().brush(QPalette::Normal,QPalette::Base));
+    }
+    currentItem->setForeground(QPalette().brush(QPalette::Normal,QPalette::WindowText));
+}
+
+//Disable a table widget item
+void DropTableWidget::setDisableStyleWidgetItem(QTableWidgetItem *currentItem){
+    currentItem->setBackground(this->disabledBackStyle);
+    currentItem->setForeground(this->disabledTextStyle);
+}
+
+QString DropTableWidget::getFileAbsolute(int row){
+    QString fileCommand=this->item(row,2)->text();
+
+    int idxFileName=fileCommand.indexOf(this->item(row,0)->text()); //Search first for the file name
+    int fileAbsoluteStartIdx=Util::indexOfBackward(fileCommand,"\"",idxFileName);
+
+    fileCommand.remove(0,fileAbsoluteStartIdx);
+    int fileAbsoluteEndIdx=fileCommand.indexOf('"',1); //1 to find the end quoate and not the start
+
+    return fileCommand.remove(fileAbsoluteEndIdx,(fileCommand.size()-1)-fileAbsoluteEndIdx);
+}
+
+QString DropTableWidget::getOutputAbsolute(int row){
+    QString command=this->item(row,2)->text();
+
+    int fileAbsoluteEndIdx=command.indexOf("/\"",0); //let's find the /" (end of path)
+
+    command.remove(fileAbsoluteEndIdx,command.size()-1);
+
+    int fileAbsoluteStartIdx=Util::indexOfBackward(command,"\"",command.size()-1)+1;
+
+    return command.remove(0,fileAbsoluteStartIdx);
+}
+
+
+void DropTableWidget::updateTableToolTips(int row){
+    for(int i=0; i<this->columnCount(); i++){
+        this->item(row,i)->setToolTip(this->item(row,i)->text());
+    }
+}
+
Index: s10k/Vago/libs/DropTableWidget/droptablewidget.h
===================================================================
--- s10k/Vago/libs/DropTableWidget/droptablewidget.h	(revision 1092)
+++ s10k/Vago/libs/DropTableWidget/droptablewidget.h	(revision 1092)
@@ -0,0 +1,63 @@
+#ifndef DROPTABLEWIDGET_H
+#define DROPTABLEWIDGET_H
+
+#include <QTableWidget>
+#include <QtWidgets>
+
+#include "utilvago.h"
+
+
+//Used in swapPositions function, for switching orders and maintain the disabled style
+struct tableRowProperties{ //No need for typedef in c++ :)
+    QStringList cells;
+    bool isDisabled;
+
+    tableRowProperties(){
+        cells = QStringList(); //initialize the list on the constructor
+        isDisabled=false; //if you don't initialize a variable at c++ it is random assigned!
+    }
+};
+
+class QMimeData;
+
+class DropTableWidget : public QTableWidget {
+
+    Q_OBJECT
+
+public:
+    DropTableWidget(QWidget *parent = 0,
+                    QBrush _disabledBackStyle = QPalette().brush(QPalette::Disabled,QPalette::Base),
+                    QBrush _disabledTextStyle = QPalette().brush(QPalette::Disabled,QPalette::WindowText));
+
+    const QBrush disabledBackStyle;
+    const QBrush disabledTextStyle;
+
+    void swapPositions(QList<int> rowsSelected, int numUnitsToMove);
+    void resetStyleWidgetItem(QTableWidgetItem *currentItem);
+    void setDisableStyleWidgetItem(QTableWidgetItem *currentItem);
+    void updateTableToolTips(int row);
+    QString getFileAbsolute(int row);
+    QString getOutputAbsolute(int row);
+
+public slots:
+    void clear();
+
+signals:
+    void changed(const QMimeData *mimeData = 0);
+    void dropped(DropTableWidget *myTable, QStringList pathList);
+    QString getTypeConversion(DropTableWidget *thisTable);
+    void changeToCurrentSettings(int rows[], DropTableWidget* thisTable);
+    void dtContextMenu(DropTableWidget* thisTable, QContextMenuEvent *event);
+
+protected:
+    void dragEnterEvent(QDragEnterEvent *event);
+    void dragMoveEvent(QDragMoveEvent *event);
+    void dragLeaveEvent(QDragLeaveEvent *event);
+    void dropEvent(QDropEvent *event);
+    void contextMenuEvent(QContextMenuEvent * event);
+
+private:
+    QTableWidget *tablewidget;
+};
+
+#endif // DROPTABLEWIDGET_H
Index: s10k/Vago/libs/LineNumberDisplay/LineNumberDisplay.cpp
===================================================================
--- s10k/Vago/libs/LineNumberDisplay/LineNumberDisplay.cpp	(revision 1092)
+++ s10k/Vago/libs/LineNumberDisplay/LineNumberDisplay.cpp	(revision 1092)
@@ -0,0 +1,127 @@
+/***************************************************************************
+    File                 : LineNumberDisplay.cpp
+    Project              : QtiPlot
+    --------------------------------------------------------------------
+    Copyright            : (C) 2008 by Ion Vasilief
+    Email (use @ for *)  : ion_vasilief*yahoo.fr
+    Description          : A widget displaying line numbers for a QTextEdit
+
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the Free Software           *
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
+ *   Boston, MA  02110-1301  USA                                           *
+ *                                                                         *
+ ***************************************************************************/
+#include "LineNumberDisplay.h"
+#include <QScrollBar>
+#include <QShowEvent>
+#include <QPainter>
+
+LineNumberDisplay::LineNumberDisplay(QTextEdit *te, QWidget *parent)
+		 : QTextEdit(parent), d_text_edit(te)
+{
+	setReadOnly(true);
+	setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	setFrameStyle(QFrame::Panel | QFrame::Raised);
+	setMaximumWidth(0);
+	setLineWidth(0);
+	setFocusPolicy(Qt::NoFocus);
+	setCurrentFont(te->currentFont());
+	viewport()->setCursor(Qt::ArrowCursor);
+
+	QPalette palette = this->palette();
+	palette.setColor(QPalette::Highlight, palette.color(QPalette::Base));
+	setPalette(palette);
+
+	if (te){
+		connect(this, SIGNAL(selectionChanged()), this, SLOT(updateDocumentSelection()));
+
+		connect(te->document(), SIGNAL(contentsChanged()), this, SLOT(updateLineNumbers()));
+		connect((QObject *)te->verticalScrollBar(), SIGNAL(valueChanged(int)),
+			(QObject *)verticalScrollBar(), SLOT(setValue(int)));
+        connect(te, SIGNAL(currentCharFormatChanged (const QTextCharFormat &)),
+                this, SLOT(changeCharFormat (const QTextCharFormat &)));
+	}
+
+    // Disable manual user scrolls
+    this->verticalScrollBar()->setEnabled(false);
+    this->horizontalScrollBar()->setEnabled(false);
+}
+
+void LineNumberDisplay::updateDocumentSelection()
+{
+	if (!isVisible() || !d_text_edit)
+		return;
+
+	QTextCursor c = textCursor();
+#if QT_VERSION >= 0x040500
+	int selectionStart = document()->findBlock(c.selectionStart()).firstLineNumber();
+	int selectionEnd = document()->findBlock(c.selectionEnd()).firstLineNumber();
+#else
+	int selectionStart = document()->findBlock(c.selectionStart()).blockNumber();
+	int selectionEnd = document()->findBlock(c.selectionEnd()).blockNumber();
+#endif
+	int selectedLines = abs(selectionEnd - selectionStart);
+
+	QTextCursor cursor(d_text_edit->textCursor());
+	cursor.movePosition(QTextCursor::Start);
+	for (int i = 0; i < selectionStart; i++)
+		cursor.movePosition(QTextCursor::Down);
+
+	for (int i = 0; i < selectedLines; i++)
+		cursor.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor);
+
+	cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
+
+	if (selectionEnd == d_text_edit->document()->blockCount() - 1)
+		cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
+
+	d_text_edit->setTextCursor(cursor);
+}
+
+void LineNumberDisplay::updateLineNumbers(bool force)
+{
+	if (!isVisible() || !d_text_edit)
+		return;
+
+	int lines = d_text_edit->document()->blockCount();
+	if (document()->blockCount() - 1 == lines && !force)
+		return;
+
+	QString aux;
+	for(int i = 0; i < lines; i++)
+		aux += QString::number(i + 1) + "\n";
+
+	setPlainText(aux);
+
+	QFontMetrics fm(d_text_edit->currentFont(), this);
+    setMaximumWidth(2.5*fm.boundingRect(QString::number(lines)).width()); // 2.5 small fix to display numbers correctly on macos
+	verticalScrollBar()->setValue(d_text_edit->verticalScrollBar()->value());
+}
+
+void LineNumberDisplay::showEvent(QShowEvent *e)
+{
+	e->accept();
+	if (isVisible())
+		updateLineNumbers();
+}
+
+void LineNumberDisplay::changeCharFormat (const QTextCharFormat &f)
+{
+    setCurrentFont(f.font());
+}
Index: s10k/Vago/libs/LineNumberDisplay/LineNumberDisplay.h
===================================================================
--- s10k/Vago/libs/LineNumberDisplay/LineNumberDisplay.h	(revision 1092)
+++ s10k/Vago/libs/LineNumberDisplay/LineNumberDisplay.h	(revision 1092)
@@ -0,0 +1,62 @@
+/***************************************************************************
+    File                 : LineNumberDisplay.h
+    Project              : QtiPlot
+    --------------------------------------------------------------------
+    Copyright            : (C) 2008 by Ion Vasilief
+    Email (use @ for *)  : ion_vasilief*yahoo.fr
+    Description          : A widget displaying line numbers for a QTextEdit
+
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the Free Software           *
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
+ *   Boston, MA  02110-1301  USA                                           *
+ *                                                                         *
+ ***************************************************************************/
+#ifndef LineNumberDisplay_H
+#define LineNumberDisplay_H
+
+#include <QTextEdit>
+#include <QTextBlock>
+
+//! A QTextEdit displaying line numbers.
+/**
+ * It must be used in connection with another "source" QTextEdit.
+ */
+class LineNumberDisplay: public QTextEdit
+{
+    Q_OBJECT
+
+public:
+	//! Constructor
+	/**
+	* \param te the "source" QTextEdit for which we want to display the line numbers
+	* \param parent parent widget (only affects placement of the dialog)
+	*/
+	LineNumberDisplay(QTextEdit *te, QWidget *parent = 0);
+
+public slots:
+	void updateLineNumbers(bool force = false);
+	void updateDocumentSelection();
+
+private slots:
+	void changeCharFormat (const QTextCharFormat &);
+
+private:
+	void showEvent(QShowEvent *);
+	QTextEdit *d_text_edit;
+};
+#endif
Index: s10k/Vago/logger.cpp
===================================================================
--- s10k/Vago/logger.cpp	(revision 1092)
+++ s10k/Vago/logger.cpp	(revision 1092)
@@ -0,0 +1,41 @@
+#include "logger.h"
+
+Logger::Logger(QString appDir, QString logFileName)
+{
+    myLogFile = std::make_unique<QFile>(appDir+"/"+logFileName);
+
+    if (!myLogFile->open(QIODevice::WriteOnly | QIODevice::Text)){ //open to write
+        return;
+    }
+
+    logStream = std::make_unique<QTextStream>(myLogFile.get());
+    //logStream->setCodec("UTF-8");
+}
+
+/**
+  ** Mutex makes it thread safe. (not sure if needed although)
+  **/
+void Logger::writeString(QString strToWrite){
+    mutex.lock();
+    *this->logStream << "--------------------------------------------";
+    *this->logStream << "\nEvent Start: " << QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss") << "\n" << strToWrite << "\nEvent End.\n";
+    *this->logStream << "--------------------------------------------\n";
+    this->logStream->flush();
+    mutex.unlock();
+}
+
+/**
+ ** Mutex makes it thread safe. (not sure if needed although)
+ **/
+void Logger::writeBytes(QByteArray arrToWrite){
+    mutex.lock();
+    *this->logStream << "--------------------------------------------";
+    *this->logStream << "\nEvent Start: " << QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss") << "\n" << arrToWrite << "\nEvent End.\n";
+    *this->logStream << "--------------------------------------------";
+    this->logStream->flush();
+    mutex.unlock();
+}
+
+Logger::~Logger(){
+
+}
Index: s10k/Vago/logger.h
===================================================================
--- s10k/Vago/logger.h	(revision 1092)
+++ s10k/Vago/logger.h	(revision 1092)
@@ -0,0 +1,22 @@
+#ifndef LOGGER_H
+#define LOGGER_H
+#include <QFile>
+#include <QTextStream>
+#include <QMutex>
+#include <QDateTime>
+#include <memory>
+
+class Logger
+{
+public:
+    Logger(QString  appDir, QString logFileName);
+    ~Logger();
+    void writeString(QString strToWrite);
+    void writeBytes(QByteArray arrToWrite);
+private:
+    std::unique_ptr<QFile> myLogFile;
+    std::unique_ptr<QTextStream> logStream;
+    QMutex mutex; //mutex for control writes to the logs
+};
+
+#endif // LOGGER_H
Index: s10k/Vago/main.cpp
===================================================================
--- s10k/Vago/main.cpp	(revision 1092)
+++ s10k/Vago/main.cpp	(revision 1092)
@@ -0,0 +1,16 @@
+#include <QtWidgets/QApplication>
+#include "mainwindow.h"
+
+// TODO add lineedit to other lineedits that can receive files or folders, create additional funtions in lineedit where we can specify what kind of argument it accepts
+// Example: setAllowFolders(), setAllowFiles() or setAcceptedTypes(Enum from QtFiles)
+int main(int argc, char *argv[])
+{
+
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+    a.setStyleSheet("QStatusBar::item { border: 0px; }"); //hide QLabels border in status bar //http://qt-project.org/forums/viewthread/18743
+
+    return a.exec();
+}
+
Index: s10k/Vago/mainwindow.cpp
===================================================================
--- s10k/Vago/mainwindow.cpp	(revision 1092)
+++ s10k/Vago/mainwindow.cpp	(revision 1092)
@@ -0,0 +1,2285 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+const QString MainWindow::VagoSettingsName = "settingsVago.ini";
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+
+    this->myLogger = new Logger(UtilVago::getAppPath(), GlobalVars::AppLogName); //start logger
+
+    this->myLogger->writeString("Detected AppDir: "+UtilVago::getAppPath());
+    this->myLogger->writeString("True app dir: "+QDir::currentPath());
+
+    setVagoWindowTitle();
+
+    if(!QFile::exists(UtilVago::getOniSplitExecutableAbsolutePath())){
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "OniSplit not found. Please download it at "+GlobalVars::ModsDomain+" and put it the Vago's tools folder. \n\nProgram will now exit.");
+        exit(1);
+    }
+
+    if(!QFile::exists(UtilVago::getXmlToolsExecutableAbsolutePath())){
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "XmlTools not found. Please download it at "+GlobalVars::ModsDomain+" and put it the Vago's tools folder. \n\nProgram will now exit.");
+        exit(1);
+    }
+
+    this->vagoSettings = new QSettings(UtilVago::getAppPath() + "/" + this->VagoSettingsName, QSettings::IniFormat);
+
+    //First Execution? Old configuration? Settings missed?
+    bool iniChanged=false;
+    if(!this->vagoSettings->contains("VagoVersion") || this->vagoSettings->value("VagoVersion")!=GlobalVars::AppVersion){
+        this->vagoSettings->setValue("VagoVersion", GlobalVars::AppVersion);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("Workspace")){
+        this->vagoSettings->setValue("Workspace", UtilVago::getAppPath()+"/VagoWorkspace");
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("AeFolder")){
+
+        Util::showPopUp("Seems it's the first time you are executing Vago. \n\nPlease input your Anniversary Edition (AE) Folder.");
+        QString aefolder=Util::normalizePath(QFileDialog::getExistingDirectory(this,"Choose Anniversary Edition (AE) folder..."));
+
+        if(aefolder.isEmpty()){
+            UtilVago::showAndLogErrorPopUp(this->myLogger, "AE folder is mandatory. Application will now exit.");
+            exit(1);
+        }
+
+        if(!aefolder.endsWith("AE")){
+            Util::showWarningPopUp("Seems the folder you selected isn't called 'AE'. \n\nIf you run in any problems you can always change it in Vago preferences window.");
+        }
+
+        this->vagoSettings->setValue("AeFolder", aefolder);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("WindowWidth")){
+        this->vagoSettings->setValue("WindowWidth", GlobalVars::DefaultWindowWidth);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("WindowHeight")){
+        this->vagoSettings->setValue("WindowHeight", GlobalVars::DefaultWindowHeight);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("OniWindow")){
+        this->vagoSettings->setValue("OniWindow", true);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("SeparateInWorkspace")){
+        this->vagoSettings->setValue("SeparateInWorkspace",true);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("AskSaveProject")){
+        this->vagoSettings->setValue("AskSaveProject", true);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("AskToOpenLastProject")){
+        this->vagoSettings->setValue("AskToOpenLastProject", false);
+        iniChanged=true;
+    }
+    if(!this->vagoSettings->contains("LastProjectPath")){
+        this->vagoSettings->setValue("LastProjectPath", this->vagoSettings->value("Workspace"));
+        iniChanged=true;
+    }
+    for(int i=0; i<this->recentProjectsMaxSize; i++){
+        if(!this->vagoSettings->contains("RecentProject" + QString::number(i+1))){
+            this->vagoSettings->setValue("RecentProject" + QString::number(i+1), "");
+            iniChanged=true;
+        }
+    }
+#ifdef Q_OS_MAC
+    if(!this->vagoSettings->contains("useYesAsDefaultWhenRemovingItems")){
+        this->vagoSettings->setValue("useYesAsDefaultWhenRemovingItems", false);
+        iniChanged=true;
+    }
+#endif
+
+    if(iniChanged){
+        this->vagoSettings->sync();
+    }
+    ///
+
+    this->workspaceLocation=this->vagoSettings->value("Workspace").toString();
+    this->workspaceWizardsLocation=this->workspaceLocation+"/Wizards";
+    this->AeLocation=this->vagoSettings->value("AeFolder").toString();
+    this->outputFolder=this->workspaceLocation;
+    this->startedWindowWidth=this->vagoSettings->value("WindowWidth").toInt();
+    this->startedWindowHeight=this->vagoSettings->value("WindowHeight").toInt();
+#ifdef Q_OS_MAC
+    this->useYesAsDefaultWhenRemovingItems=this->vagoSettings->value("useYesAsDefaultWhenRemovingItems").toBool();
+#endif
+
+    //Create our workspace if it doesn't exists yet
+    if(!QDir(this->workspaceLocation).exists()){
+        QDir().mkdir(this->workspaceLocation);
+    }
+    this->itemsLoaded=new QLabel(this);
+    ui->statusBar->addWidget(this->itemsLoaded);
+    this->myBar = new QProgressBar(this);
+    this->myBar->setTextVisible(false); //hides text
+
+    this->myBar->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Fixed);
+    this->myBar->setMinimumWidth(150);
+    this->myBar->hide(); //hide while not being used
+    ui->tbAbortConversion->hide(); //hide while not being used
+
+    ui->statusBar->addPermanentWidget(this->myBar); //this adds automatically in right
+    ui->statusBar->addPermanentWidget(ui->tbAbortConversion);
+
+    // User interface
+    ui->mainToolBar->addWidget(ui->tbAE); //add ae installer launch button
+    ui->mainToolBar->addWidget(ui->emptySpacerLabel); //trick, we can't add directly a space so we add an empty
+    ui->mainToolBar->addWidget(ui->tbOni); //add oni launch buttonlabel
+    ui->mainToolBar->addWidget(ui->emptySpacerLabel2); //same as before
+    ui->mainToolBar->addWidget(ui->tbCommand); //add option to manual onisplit commands
+    ui->mainToolBar->addWidget(ui->emptySpacerLabel3); //same as before
+    ui->mainToolBar->addWidget(ui->tbXmlToolsInterface); //add option to manual onisplit commands
+    ui->mainToolBar->addWidget(ui->emptySpacerLabel4); //same as before
+    ui->mainToolBar->addWidget(ui->tbOpenFolder); //add option to open folder with files converted etc
+
+    ui->mainToolBar->setLayoutDirection(Qt::RightToLeft);
+
+    ui->pbConvert->setMinimumHeight(ui->pbConvert->sizeHint().height()*1.5); // This is OS indepented. It maintain size ratio over the Windows and Mac.
+
+
+#ifdef Q_OS_MAC
+    // setUnifiedTitleAndToolBarOnMac(true); // Qt suggests to use it on mac | http://www.slideshare.net/qtbynokia/how-to-make-your-qt-app-look-native // align on left doesn't work if active
+    ui->tbOni->setIcon(QIcon(":/new/icons/oni_icon_mac.png")); // Oni executable on mac have a different icon than windows
+    // Set mac platform the first one in the menu, and also make it checkable by default
+    ui->menuTarget_Platform->removeAction(ui->actionWindows);
+    ui->menuTarget_Platform->addAction(ui->actionWindows);
+    ui->actionWindows->setChecked(false);
+    ui->actionMac_Windows_demo->setChecked(true);
+    // resize(800,600); // Mac OS pcs should be able to render this resolution without any problem. It's also better
+    //// because the components on mac use more space
+#endif
+
+    resize(this->startedWindowWidth,this->startedWindowHeight);
+
+#ifdef Q_OS_MAC
+    ui->pbConvert->setToolTip(ui->pbConvert->toolTip() + " (⌘ + Enter)");
+#else
+    ui->pbConvert->setToolTip(ui->pbConvert->toolTip() + " (Ctrl + Enter)");
+#endif
+
+    //Commands Mapping
+    this->commandMap = QHash<QString, QString>();
+    mapCommands();
+
+    updateItemsLoaded(ui->twSourcesXML);
+
+    loadRecentProjects();
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+    this->myLogger->writeString("Application Exited.");
+}
+
+
+void MainWindow::showEvent(QShowEvent *e)
+{
+    // If we don't have a converter yet, application wasn't started.
+    if(!this->applicationIsFullyLoaded)
+    {
+        // Apparently Qt doesn't contains a slot to when the application was fully load (mainwindow). So we do our own implementation instead.
+        connect(this, SIGNAL(signalAppIsLoaded()), this, SLOT(applicationWasLoaded()), Qt::ConnectionType::QueuedConnection);
+        emit signalAppIsLoaded();
+    }
+
+    e->accept();
+}
+
+// Called only when the MainWindow was fully loaded and painted on the screen. This slot is only called once.
+void MainWindow::applicationWasLoaded(){
+#ifdef Q_OS_WIN
+    // QProgressBar only works after the windows was shown
+    // http://stackoverflow.com/questions/24840941/qwintaskbarprogress-wont-show (Kervala answer)
+
+    this->win7TaskBarButton = new QWinTaskbarButton();
+
+    this->win7TaskBarButton->setWindow(this->windowHandle());
+
+    this->win7TaskBarProgress = this->win7TaskBarButton->progress();
+
+    //Create a thread for do the conversion in background
+    this->myConverter = new Converter(UtilVago::getAppPath(), this->myLogger, &this->listToProccess, this->win7TaskBarProgress);
+#else
+    this->myConverter = new Converter(UtilVago::getAppPath(), this->myLogger, &this->listToProccess);
+#endif
+
+    connectSlots();
+
+    this->myLogger->writeString("Application started.");
+
+    this->applicationIsFullyLoaded = true;
+
+    QString lastSavedProject = this->vagoSettings->value("RecentProject1").toString();
+
+    if(!lastSavedProject.isEmpty() && this->vagoSettings->value("AskToOpenLastProject").toBool()){
+        if(Util::showQuestionPopUp(this,"Do you want to load latest project?\n\nLatest project was '" + Util::cutNameWithoutBackSlash(lastSavedProject) + "'.")){
+            loadProjectState(lastSavedProject);
+        }
+    }
+}
+
+
+void MainWindow::on_actionExit_triggered()
+{
+    close();
+}
+
+void MainWindow::on_actionAbout_triggered()
+{
+    //Show preferences
+    About *aboutWindow = new About(this);
+    aboutWindow->show(); //it destroys itself when finished.
+}
+
+void MainWindow::on_actionAE_Package_Creator_triggered()
+{
+    // it deletes itself once closed
+    WizardFactory<PackageWizard>::startInstance(UtilVago::getAppPath(), this->workspaceWizardsLocation, this->vagoSettings, this->myLogger);
+}
+
+void MainWindow::on_actionSound_Wizard_triggered()
+{
+    // it deletes itself once closed
+    WizardFactory<SoundWizard>::startInstance(UtilVago::getAppPath(), this->workspaceWizardsLocation, this->vagoSettings, this->myLogger, &this->commandMap);
+}
+
+void MainWindow::on_actionBackground_Image_Wizard_triggered()
+{
+    // it deletes itself once closed
+    WizardFactory<BGImageWizard>::startInstance(UtilVago::getAppPath(), this->workspaceWizardsLocation, this->vagoSettings, this->myLogger);
+}
+
+void MainWindow::on_actionWindow_Messages_Wizard_triggered()
+{
+    // it deletes itself once closed
+    WizardFactory<WmWizard>::startInstance(UtilVago::getAppPath(), this->workspaceWizardsLocation, this->vagoSettings, this->myLogger);
+}
+
+void MainWindow::on_tbOni_clicked()
+{
+    QStringList arguments;
+
+    if(this->vagoSettings->value("OniWindow").toBool()){ // Run in a window?
+        arguments << "-noswitch";
+    }
+#ifdef Q_OS_WIN
+    else{
+        arguments << "-switch"; // only supported on windows. Was added by daodan dll.
+    }
+#endif
+
+    arguments << "-debugfiles";
+
+    if(!QProcess::startDetached(this->AeLocation+"/"+GlobalVars::OniExe,arguments,this->AeLocation)){
+        showErrStatusMessage("Oni could not be started!");
+    }
+}
+
+void MainWindow::on_tbAE_clicked()
+{
+    // If the app turn out someday to a native app use QProcess::startDetached instead...
+
+    if(!QDesktopServices::openUrl("file:///"+this->AeLocation+"/AEInstaller/bin/AEInstaller2.jar")){
+        showErrStatusMessage("Could not start AE Installer!");
+    }
+}
+
+void MainWindow::on_tbOpenFolder_clicked()
+{
+    QDesktopServices::openUrl(QUrl("file:///"+this->outputFolder));
+}
+
+
+void MainWindow::on_tbXmlToolsInterface_clicked()
+{
+    //We pass no parent because we want to have an independent window for XmlToolsInterface,
+    //so we can minimize it or maximize indepently from the MainWindow
+    XmlToolsInterface *xmlToolsWindow = new XmlToolsInterface(this->myLogger);
+    xmlToolsWindow->show(); //it destroys itself when finished.
+}
+
+void MainWindow::on_tbAbortConversion_clicked()
+{
+    if(Util::showQuestionPopUp(this,"Are you sure you want to abort the current conversion?")){
+        emit terminateCurrProcess();
+    }
+}
+
+void MainWindow::on_cbEnvMap_toggled(bool checked)
+{
+    ui->leEnvMapTexture->setEnabled(checked);
+}
+
+void MainWindow::on_cbTexture_toggled(bool checked)
+{
+    ui->leTextureName->setEnabled(checked);
+}
+
+void MainWindow::on_cbWithAnimation_toggled(bool checked)
+{
+    ui->leAnimationName->setEnabled(checked);
+}
+
+void MainWindow::on_cbSpecificFilesLevels_toggled(bool checked)
+{
+    ui->leSpecificFilesLevels->setEnabled(checked);
+}
+
+void MainWindow::on_actionCheck_For_Updates_triggered()
+{
+
+    //let's check in the web if this version is the latest
+    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+    connect(manager, SIGNAL(finished(QNetworkReply*)),
+            this, SLOT(checkVagoLastVersion(QNetworkReply*)));
+
+    manager->get(QNetworkRequest(QUrl(GlobalVars::VagoCheckUpdatesUrl)));
+
+}
+
+void MainWindow::checkVagoLastVersion(QNetworkReply *result){
+
+    if(result->error()==QNetworkReply::NoError){
+        QScriptEngine engine;
+        QScriptValue sc = engine.evaluate("(" + QString(result->readAll()) + ")");
+
+        // "field_version":{"und":[{"value":"0.6a","format":null,"safe_value":"0.6a"}]} //Note the use of [{}] which means it's a array of 1 element with one object inside (so the use of [0] bellow
+
+        QString newVersion = sc.property("field_version").toObject().property("und").toObject().property("0").toObject().property("value").toString();
+
+        if(newVersion!=GlobalVars::AppVersion){
+            Util::showRichPopUp("There's a new version of Vago! (v"+newVersion+")<br/><br/>"+
+                                "You can download it <a href='"+GlobalVars::VagoWebUrl+"'>here</a>.");
+        }
+        else{
+            Util::showPopUp("You are using last version.");
+        }
+    }
+    else{
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "An error occurred checking last version:\n\n"+result->errorString());
+    }
+    result->deleteLater();
+}
+
+void MainWindow::on_pbAddSourceXML_clicked()
+{
+    addFilesSource( ui->twSourcesXML,QFileDialog::getOpenFileNames(this,"Choose the files...","./" , "All Files (*.*)"));
+}
+
+void MainWindow::on_pbAddSourceTextures_clicked()
+{
+    addFilesSource( ui->twSourcesTextures, QFileDialog::getOpenFileNames(this,"Choose the files...","./" , "All Files (*.*)"));
+}
+
+void MainWindow::on_pbAddSourceObjects_clicked()
+{
+    addFilesSource( ui->twSourcesObjects,QFileDialog::getOpenFileNames(this,"Choose the files...","./" , "All Files (*.*)"));
+}
+
+void MainWindow::on_pbAddSourceCharacters_clicked()
+{
+    addFilesSource( ui->twSourcesCharacters,QFileDialog::getOpenFileNames(this,"Choose the files...","./" , "All Files (*.*)"));
+}
+
+void MainWindow::on_pbAddSourceLevels_clicked()
+{
+    if(QString::compare(ui->cbFromLevels->currentText(),"ONI FILES",Qt::CaseSensitive)==0 && QString::compare(ui->cbToLevels->currentText(),"DAT",Qt::CaseSensitive)==0){ //CaseSensitive is faster)
+        addFilesSource(ui->twSourcesLevels,Util::multipleDirDialog("Choose folders with ONIs..."));
+    }
+    else{
+        addFilesSource(ui->twSourcesLevels,QFileDialog::getOpenFileNames(this,"Choose the files...","./" , "All Files (*.*)"));
+    }
+}
+
+void MainWindow::on_pbAddSourceMisc_clicked()
+{
+    addFilesSource( ui->twSourcesMisc,QFileDialog::getOpenFileNames(this,"Choose the files...","./" , "All Files (*.*)"));
+}
+
+QString MainWindow::getFileOutputFolder(QString fromTo, QString myOutputFolder){
+
+    if(myOutputFolder==""){ //We may want to change to a non standart location with context menu
+        myOutputFolder=this->outputFolder;
+    }
+
+    if(this->vagoSettings->value("SeparateInWorkspace").toBool() && myOutputFolder==this->workspaceLocation){
+        myOutputFolder+="/"+ui->tabWidget->tabText(ui->tabWidget->currentIndex());
+        myOutputFolder+="/"+QString(fromTo).replace(" / ","_").replace(" > "," - ");
+    }
+    return Util::insertQuotes(myOutputFolder+"/");
+}
+
+void MainWindow::addFilesSource(DropTableWidget *myTable, QStringList files){
+
+    //Get Conversion pretended
+    QString from,to;
+
+    QString fromTo = getTypeConversion(myTable);
+
+    from = QString(fromTo).remove(fromTo.indexOf(" >"),fromTo.size()-1); //parse the string to get the from, only 1 time parsed by each group of files = very fast
+    to = QString(fromTo).remove(0,fromTo.lastIndexOf("> ")+2); //+2 to start after "> "
+
+    //Pre-processing (check if the files/folders received are valid), e.g. check for ONI->DAT if are only given folders and not files
+    if(from=="ONI FILES" && to=="DAT"){
+        //check if it's a folder
+        foreach(QString myFile, files){
+            if(!QDir(myFile).exists()){
+                showErrStatusMessage("Only folders are allowed for this operation.");
+                return;
+            }
+        }
+
+    }
+    else{
+        foreach(QString myFile, files){
+            //check if it's a file
+            if(QDir(myFile).exists()){
+                showErrStatusMessage("Only files are allowed for this operation.");
+                return;
+            }
+        }
+    }
+
+    //Build command
+    QString command, lastFileName;
+
+    QString myOutputFolder=getFileOutputFolder(fromTo);
+
+    //if folder doesn't exist onisplit will create it for us :)
+    foreach(QString currentFile, files){
+
+        currentFile=Util::normalizeAndQuote(currentFile); //insert quotes ("") in file
+
+        if(lastFileName.isEmpty()){ //Optimization: all commands are the same for each file, just replace the filename
+
+            command=getCommand(myTable,myOutputFolder,from,to,currentFile);
+
+            if(command.isEmpty()){ //something wrong was happening (not inputted a texture name?)
+                return; //stop adding files
+            }
+            currentFile=Util::cutName(currentFile);
+        }else{ //one parsing was already made just replace the filename by the old one in the command
+
+            currentFile=Util::cutName(currentFile);
+
+            command.replace(lastFileName,currentFile,Qt::CaseSensitive); //case sentive is faster
+        }
+
+        lastFileName=currentFile;
+
+        addRowTable(myTable,lastFileName,fromTo,command);
+    }
+    updateItemsLoaded(myTable);
+    rowsWereChangedInDropTableWidget();
+}
+
+QString MainWindow::fileParsingXML(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file){
+
+    QString command;
+
+    if(from=="ONI" && to=="XML"){
+        return command=this->commandMap.value(tabTitle+"->"+from+"->"+to)+" "+myOutputFolder+" "+file;
+    }
+    else if(from=="XML" && to=="ONI"){
+        return command=this->commandMap.value(tabTitle+"->"+from+"->"+to)+" "+myOutputFolder+" "+file;
+    }
+
+    return "";
+
+}
+
+QString MainWindow::fileParsingTextures(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file){
+
+    QString command=this->commandMap.value(tabTitle+"->"+from+"->"+to)+" "+myOutputFolder;
+
+    if(ui->gbTextures->isEnabled()){ //faster than compare strings (if is DAT/ONI)
+
+        if(ui->cbMipMapsTextures->isChecked()){
+            command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbMipMapsTextures->text());
+        }
+
+        if(ui->cbNoUwrap->isChecked()){
+            command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbNoUwrap->text());
+        }
+
+        if(ui->cbNoVwrap->isChecked()){
+            command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbNoVwrap->text());
+        }
+
+        if(ui->cbLarge->isChecked()){
+            command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbLarge->text());
+        }
+
+        command+=" "+this->commandMap.value(tabTitle+"->"+getTextureRBCheckedTypeTexture()->text());
+
+        if(ui->cbEnvMap->isChecked()){
+            if(ui->leEnvMapTexture->text().isEmpty()){
+                showErrStatusMessage("Checkbox '"+ui->cbEnvMap->text()+"' is selected. The name texture name cannot be empty.");
+                return "";
+            }
+            command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbEnvMap->text()) + ui->leEnvMapTexture->text().remove(".oni",Qt::CaseInsensitive);
+        }
+    }
+
+    return command+=" "+file; //add source
+}
+
+QString MainWindow::fileParsingCharacters(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file){
+
+    QString command=this->commandMap.value(tabTitle+"->"+from+"->"+to)+" "+myOutputFolder + " " + file ;
+
+
+    if(ui->cbCellShading->isChecked()){
+        command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbCellShading->text());
+    }
+
+    if(ui->cbNormals->isChecked()){
+        command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbNormals->text());
+    }
+
+    if(ui->cbWithTRBS_ONCC->isChecked()){
+        if(ui->leTRBS_ONCC->text().isEmpty()){
+            showErrStatusMessage("Checkbox '"+ui->cbWithTRBS_ONCC->text()+"' is selected. The name cannot be empty.");
+            return "";
+        }
+
+        command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbWithTRBS_ONCC->text())+Util::normalizeAndQuote(ui->leTRBS_ONCC->text());
+    }
+
+    return command;
+}
+
+
+QString MainWindow::fileParsingObjects(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file){
+
+    QString command=this->commandMap.value(tabTitle+"->"+from+"->"+to)+" "+myOutputFolder;
+
+    if(ui->cbTexture->isChecked()){
+        if(ui->leTextureName->text().isEmpty()){
+            showErrStatusMessage("Checkbox '"+ui->cbTexture->text()+"' is selected. The file source cannot be empty.");
+            return "";
+        }
+        command+=" "+this->commandMap.value(tabTitle+"->"+ui->cbTexture->text()) + ui->leTextureName->text();
+    }
+    else if(ui->cbWithAnimation->isChecked()){
+        if(ui->leAnimationName->text().isEmpty()){
+            showErrStatusMessage("Checkbox '"+ui->cbWithAnimation->text()+"' is selected. The file source cannot be empty.");
+            return "";
+        }
+        command+=" "+Util::normalizeAndQuote(ui->leAnimationName->text()) + " " + this->commandMap.value(tabTitle+"->"+ui->cbWithAnimation->text()) + file;
+        return command;
+    }
+
+    if(from=="OBAN ONI (cam)"){
+        command+=" -geom:camera";
+    }
+
+    return command+=" "+file; //add source
+}
+
+QString MainWindow::fileParsingLevels(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file){
+
+    QString datName, command;
+
+    if(!(from=="ONI FILES" && to=="DAT")){ // to all except this one
+
+        command=this->commandMap.value(tabTitle+"->"+from+"->"+to);
+
+        if(ui->cbSpecificFilesLevels->isChecked()){
+
+            if(ui->leSpecificFilesLevels->text().isEmpty()){
+                showErrStatusMessage("Checkbox '"+ui->cbSpecificFilesLevels->text()+"' is selected. The files pattern cannot be empty.");
+                return "";
+            }
+
+            command+=":"+ui->leSpecificFilesLevels->text();
+        }
+
+        if(from=="DAT" && to=="ONI FILES"){ // extract files to a subdir with the files name ex: level0_Final
+            command += " " + myOutputFolder.insert(myOutputFolder.size()-2,QString(Util::cutName(file)).replace(".dat","")) + " " + file;
+        }
+        else{
+            command+=" "+myOutputFolder+" "+file;
+        }
+
+    }
+
+    if((from=="ONI FILES" || from=="MASTER XML") && to=="DAT"){ // almost the same command for both
+        QString datName;
+
+        if(from=="MASTER XML"){
+            command+=GlobalVars::OniSplitProcSeparator; //insert mark so we know this action will take 2 commands
+        }
+
+        if(ui->cbDatLevels->isChecked()){
+            if(ui->leTargetDatLevels->text().isEmpty()){
+                showErrStatusMessage("Checkbox '"+ui->cbDatLevels->text()+"' is selected. The name cannot be empty.");
+                return "";
+            }
+            datName+=QString(myOutputFolder).insert(myOutputFolder.size()-1,ui->leTargetDatLevels->text()); //set name inputted by user
+            if(!ui->leTargetDatLevels->text().toUpper().endsWith(".DAT")){
+                datName.insert(datName.size()-1,".dat"); //append extension if necessary (-1 to maintain final quote)
+            }
+        }
+        else{
+            if(from=="ONI FILES"){
+                datName=QString(myOutputFolder).insert(myOutputFolder.size()-1,Util::cutName(file).remove("/")+".dat"); //if none iputted set the same name of input file
+            }
+            else if(from=="MASTER XML"){
+                datName=QString(myOutputFolder).insert(myOutputFolder.size()-1,Util::cutName(file).remove("/").replace(".xml",".dat",Qt::CaseInsensitive)); //if none iputted set the same name of input file
+            }
+        }
+        if(from=="ONI FILES"){
+            if(ui->actionWindows->isChecked()){ //is target plataform select windows?
+                return command=this->commandMap.value(tabTitle+"->"+from+"->"+to+"(PC)")+" "+ file + " "+datName;
+            }
+            else{
+                return command=this->commandMap.value(tabTitle+"->"+from+"->"+to+"(demoPCMAC)")+" "+ file + " "+datName;
+            }
+        }
+        else if(from=="MASTER XML"){
+            if(ui->actionWindows->isChecked()){ //is target plataform select windows?
+                command+=this->commandMap.value(tabTitle+"->ONI FILES->"+to+"(PC)")+" "+myOutputFolder+" "+datName; //add second command
+            }
+            else{
+                command+=this->commandMap.value(tabTitle+"->ONI FILES->"+to+"(demoPCMAC)")+" "+myOutputFolder+" "+datName; //add second command
+            }
+        }
+    }
+
+    if(ui->cbBnvLevels->isChecked()){
+
+        if(ui->leBnvLevels->text().isEmpty()){
+            showErrStatusMessage("Checkbox '"+ui->cbBnvLevels->text()+"' is selected. The BNV file cannot be empty.");
+            return "";
+        }
+        command+=" "+Util::normalizeAndQuote(ui->leBnvLevels->text());
+    }
+
+    if(ui->cbAdditionalSourcesLevels->isChecked()){
+
+        if(ui->leAdditSourcesLevels->text().isEmpty()){
+            showErrStatusMessage("Checkbox '"+ui->cbAdditionalSourcesLevels->text()+"' is selected. The source files cannot be empty.");
+            return "";
+        }
+
+        QString additionalFiles=ui->leAdditSourcesLevels->text();
+
+        int currentIndex=0, nextIndex=0;
+
+        //parse all files (separated by spaces)
+        while(true){
+            nextIndex=additionalFiles.indexOf(";",currentIndex+1);
+
+            command += " "+Util::normalizeAndQuote(additionalFiles.mid(currentIndex,(nextIndex-currentIndex)));
+
+            if(nextIndex==-1){ //we got to the end, stop parsing
+                break;
+            }
+            currentIndex=nextIndex+1; //update currentIndex +1 for start after the separator
+        }
+    }
+
+    if(ui->cbGridsLevels->isChecked()){
+        command+=GlobalVars::OniSplitProcSeparator+this->commandMap.value(tabTitle+"->"+ui->cbGridsLevels->text())+" "+Util::normalizeAndQuote(ui->leBnvLevels->text())+" "+file+" -out:"+myOutputFolder;
+    }
+
+    return command;
+}
+
+QString MainWindow::fileParsingMisc(QString myOutputFolder, QString from, QString to , QString file){
+    return this->commandMap.value("misc->"+from+"->"+to)+" "+myOutputFolder+" "+file;
+}
+
+void MainWindow::addRowTable(DropTableWidget *myTable, QString fileName, QString fromTo, QString command, bool isToDisabled){
+    //Get actual number rows
+    int twSize=myTable->rowCount();
+
+    //increase the rows for the new item
+    myTable->setRowCount(twSize+1);
+
+    //Add to table and list to
+    QTableWidgetItem *newFile = new QTableWidgetItem(fileName);
+    QTableWidgetItem *newConversion = new QTableWidgetItem(fromTo);
+    QTableWidgetItem *newCommand = new QTableWidgetItem(command);
+
+    if(isToDisabled){
+        myTable->setDisableStyleWidgetItem(newFile);
+        myTable->setDisableStyleWidgetItem(newConversion);
+        myTable->setDisableStyleWidgetItem(newCommand);
+    }
+
+    myTable->setItem(twSize,0,newFile);
+    myTable->setItem(twSize,1,newConversion);
+    myTable->setItem(twSize,2,newCommand);
+
+    myTable->updateTableToolTips(twSize); //Update tool tips
+}
+
+void MainWindow::on_pbConvert_clicked()
+{
+    startConversion();
+}
+
+void MainWindow::startConversion(){
+
+    DropTableWidget* currTable = getCurrentTableWidget();
+
+    bool ready=false;
+    for(int i=0; i<currTable->rowCount(); i++){ //There are items to process?
+        if(currTable->item(i,2)->background()!=currTable->disabledBackStyle){
+            ready=true;
+            break;
+        }
+    }
+
+    if(!ready){
+        showErrStatusMessage("Please add sources to convert first.");
+        return;
+    }
+
+    if(this->myBar->isVisible()){
+        Util::showErrorPopUp("Another conversion is progress. Please wait until it finishes.");
+        return;
+    }
+
+    for(int i=0; i<currTable->rowCount(); i++){
+        //Only process enabled items
+        if(currTable->item(i,2)->background()!=currTable->disabledBackStyle){
+            this->listToProccess.append(currTable->item(i,2)->text());
+        }
+    }
+
+    this->myConverter->start();
+}
+
+void MainWindow::TsetupProgressBar(int max){
+    this->myBar->setValue(0);
+    this->myBar->show();
+    this->myBar->setMaximum(max);
+    ui->tbAbortConversion->show();
+}
+
+void  MainWindow::TupdateProgressBar(){
+    this->myBar->setValue(this->myBar->value()+1); //more one task done
+}
+
+void MainWindow::TresultConversion(QString result, int numErrors){
+    QApplication::alert(this); //Show a notification if window is not active
+    this->myBar->hide();
+    ui->tbAbortConversion->hide();
+
+    if(numErrors!=0){
+        QString sNumErrors=QString::number(numErrors);
+        if(numErrors>1){
+            UtilVago::showErrorPopUpLogButton(result+"\n This is the last of "+sNumErrors+" errors.");
+            showErrStatusMessage("Something gone wrong. Check log file ("+sNumErrors+" errors).");
+        }
+        else{
+            UtilVago::showErrorPopUpLogButton(result);
+            showErrStatusMessage("Something gone wrong. Check log file.");
+        }
+    }
+    else{
+        showSuccessStatusMessage("Everything went well!");
+    }
+}
+
+void MainWindow::TconversionAborted(){
+    this->myBar->hide();
+    ui->tbAbortConversion->hide();
+
+    showErrStatusMessage("Conversion was aborted.");
+}
+
+void MainWindow::showErrStatusMessage(QString message){
+
+    QPalette myPalete = QPalette();
+    myPalete.setColor( QPalette::WindowText, QColor(255,0,0));
+    statusBar()->setPalette( myPalete );
+    ui->statusBar->showMessage(message,10000); //display by 10 seconds
+
+}
+
+void MainWindow::showSuccessStatusMessage(QString message){
+
+    QPalette myPalete = QPalette();
+    myPalete.setColor( QPalette::WindowText, QColor(0,150,0));
+    statusBar()->setPalette( myPalete );
+    ui->statusBar->showMessage(message,10000); //display by 10 seconds
+
+}
+
+void MainWindow::mapCommands(){
+    ////////////////////////////////////////////////////////////////////////XML Commands
+    this->commandMap.insert("xml->ONI->XML","-extract:xml");
+    this->commandMap.insert("xml->XML->ONI","-create");
+    //######################General Options
+
+    //Possible Combinations
+    this->commandMap.insertMulti("xml->ONI","XML");
+    this->commandMap.insertMulti("xml->XML","ONI");
+
+    ////////////////////////////////////////////////////////////////////////Textures Commands
+    this->commandMap.insert("textures->DAT / TXMP ONI->DDS","-extract:dds");
+    this->commandMap.insert("textures->DAT / TXMP ONI->TGA","-extract:tga");
+    this->commandMap.insert("textures->DAT / TXMP ONI->PNG","-extract:png");
+    this->commandMap.insert("textures->DAT / TXMP ONI->JPG","-extract:jpg");
+    this->commandMap.insert("textures->TGA / DDS / PNG / JPG->TXMP ONI","-create:txmp");
+    //######################Textures Options
+    this->commandMap.insert("textures->"+ui->rbBGR32->text(),"-format:bgr32");
+    this->commandMap.insert("textures->"+ui->rbBGRA32->text(),"-format:bgra32");
+    this->commandMap.insert("textures->"+ui->rbBGR555->text(),"-format:bgr555");
+    this->commandMap.insert("textures->"+ui->rbBGRA5551->text(),"-format:bgra5551");
+    this->commandMap.insert("textures->"+ui->rbBGRA444->text(),"-format:bgra4444");
+    this->commandMap.insert("textures->"+ui->rbDxt1->text(),"-format:dxt1");
+    this->commandMap.insert("textures->"+ui->cbMipMapsTextures->text(),"-genmipmaps");
+    this->commandMap.insert("textures->"+ui->cbNoUwrap->text(),"-nouwrap");
+    this->commandMap.insert("textures->"+ui->cbNoVwrap->text(),"-novwrap");
+    this->commandMap.insert("textures->"+ui->cbLarge->text(),"-large");
+    this->commandMap.insert("textures->"+ui->cbEnvMap->text(),"-envmap:");
+    //Possible Combinations
+    this->commandMap.insertMulti("textures->DAT / TXMP ONI","TGA");
+    this->commandMap.insertMulti("textures->DAT / TXMP ONI","DDS");
+    this->commandMap.insertMulti("textures->DAT / TXMP ONI","PNG");
+    this->commandMap.insertMulti("textures->DAT / TXMP ONI","JPG");
+    this->commandMap.insertMulti("textures->TGA / DDS / PNG / JPG","TXMP ONI");
+
+    ////////////////////////////////////////////////////////////////////////Characters Commands
+    this->commandMap.insert("characters->TRAM ONI->XML / XML & DAE","-extract:xml");
+    this->commandMap.insert("characters->TRBS / ONCC ONI->DAE","-extract:dae");
+    this->commandMap.insert("characters->TRBS XML->TRBS ONI","-create");
+    this->commandMap.insert("characters->TRBS DAE->TRBS ONI","-create:trbs");
+    this->commandMap.insert("characters->FILM DAT->XML","film2xml");
+
+    //######################Characters Options
+    this->commandMap.insert("characters->"+ui->cbWithTRBS_ONCC->text(),"-anim-body:");
+    this->commandMap.insert("characters->"+ui->cbCellShading->text(),"-cel");
+    this->commandMap.insert("characters->"+ui->cbNormals->text(),"-normals");
+    //Possible Combinations
+    this->commandMap.insertMulti("characters->TRAM ONI","XML / XML & DAE");
+    this->commandMap.insertMulti("characters->TRBS / ONCC ONI","DAE");
+    this->commandMap.insertMulti("characters->DAE","TRBS ONI");
+    this->commandMap.insertMulti("characters->TRBS DAE","TRBS ONI");
+    this->commandMap.insertMulti("characters->TRBS XML","TRBS ONI");
+    this->commandMap.insertMulti("characters->FILM DAT","XML");
+
+    ////////////////////////////////////////////////////////////////////////Objects Commands
+    this->commandMap.insert("objects->M3GM ONI->OBJ","-extract:obj");
+    this->commandMap.insert("objects->M3GM ONI->DAE","-extract:dae");
+    this->commandMap.insert("objects->ONWC ONI->OBJ","-extract:obj");
+    this->commandMap.insert("objects->ONWC ONI->DAE","-extract:dae");
+    this->commandMap.insert("objects->OBAN ONI (cam)->DAE","-extract:dae");
+    this->commandMap.insert("objects->OBJ->M3GM ONI","-create:m3gm");
+    //######################Characters Options
+    this->commandMap.insert("objects->"+ui->cbTexture->text(),"-tex:");
+    this->commandMap.insert("objects->"+ui->cbWithAnimation->text(),"-geom:");
+    //Possible Combinations
+    this->commandMap.insertMulti("objects->M3GM ONI","OBJ");
+    this->commandMap.insertMulti("objects->M3GM ONI","DAE");
+    this->commandMap.insertMulti("objects->ONWC ONI","OBJ");
+    this->commandMap.insertMulti("objects->ONWC ONI","DAE");
+    this->commandMap.insertMulti("objects->OBAN ONI (cam)","DAE");
+    this->commandMap.insertMulti("objects->OBJ","M3GM ONI");
+
+
+    ////////////////////////////////////////////////////////////////////////Levels Commands
+    this->commandMap.insert("levels->DAT->ONI FILES","-export");
+    //this->commandMap.insert("levels->ONI FILES->DAT","-import"); //Not used.
+    this->commandMap.insert("levels->ONI FILES->DAT(PC)","-import:nosep");
+    this->commandMap.insert("levels->ONI FILES->DAT(demoPCMAC)","-import:sep");
+    this->commandMap.insert("levels->AKEV ONI->DAE","-extract:dae");
+    this->commandMap.insert("levels->DAE->AKEV ONI","-create:akev");
+    this->commandMap.insert("levels->MASTER XML->DAT","-create:level");
+    this->commandMap.insert("levels->MASTER XML->ONI FILES","-create:level");
+    //######################Levels Options
+    this->commandMap.insert("levels->"+ui->cbGridsLevels->text(),"-grid:create");
+    //Possible Combinations
+    this->commandMap.insertMulti("levels->DAT","ONI FILES");
+    this->commandMap.insertMulti("levels->ONI FILES","DAT");
+    this->commandMap.insertMulti("levels->AKEV ONI","DAE");
+    this->commandMap.insertMulti("levels->DAE","AKEV ONI");
+    this->commandMap.insertMulti("levels->MASTER XML","DAT");
+    this->commandMap.insertMulti("levels->MASTER XML","ONI FILES");
+
+    ////////////////////////////////////////////////////////////////////////Misc Commands
+    this->commandMap.insert("misc->DAT / SNDD ONI->WAV","-extract:wav");
+    this->commandMap.insert("misc->DAT / SNDD ONI->AIF","-extract:aif");
+    this->commandMap.insert("misc->DAT / SUBT ONI->TXT","-extract:txt");
+    this->commandMap.insert("misc->WAV / AIF->SNDD ONI","-create");
+    this->commandMap.insert("misc->TXT->SUBT ONI","-create:subt");
+    //Possible Combinations
+    this->commandMap.insertMulti("misc->DAT / SNDD ONI","WAV");
+    this->commandMap.insertMulti("misc->DAT / SNDD ONI","AIF");
+    this->commandMap.insertMulti("misc->DAT / SUBT ONI","TXT");
+    this->commandMap.insertMulti("misc->WAV / AIF","SNDD ONI");
+    this->commandMap.insertMulti("misc->TXT","SUBT ONI");
+
+}
+
+void MainWindow::on_cbFromXML_currentIndexChanged(const QString &arg1)
+{
+    updateComboBox(arg1, ui->cbToXML);
+}
+
+
+void MainWindow::on_cbFromTextures_currentIndexChanged(const QString &arg1)
+{
+    updateComboBox(arg1, ui->cbToTextures);
+}
+
+void MainWindow::on_cbFromObjects_currentIndexChanged(const QString &arg1)
+{
+    updateComboBox(arg1, ui->cbToObjects);
+}
+
+void MainWindow::on_cbFromCharacters_currentIndexChanged(const QString &arg1)
+{
+    updateComboBox(arg1, ui->cbToCharacters);
+}
+
+void MainWindow::on_cbFromLevels_currentIndexChanged(const QString &arg1)
+{
+    updateComboBox(arg1, ui->cbToLevels);
+}
+
+void MainWindow::on_cbFromMisc_currentIndexChanged(const QString &arg1)
+{
+    updateComboBox(arg1, ui->cbToMisc);
+}
+
+void MainWindow::updateComboBox(const QString &arg1, QComboBox *comboBox){
+
+    QString identifier;
+
+    if(comboBox == ui->cbToXML){
+        identifier = ui->tabWidget->tabText(XMLTabIndex);
+    }
+    else if(comboBox == ui->cbToTextures){
+        identifier = ui->tabWidget->tabText(TexturesTabIndex);
+
+        //Options are only used for DAT/ONI -> Image
+        if(QString::compare(arg1,"DAT / ONI",Qt::CaseSensitive)==0){ //case sensitive is faster
+            ui->gbTextures->setEnabled(false);
+        }
+        else{
+            ui->gbTextures->setEnabled(true);
+        }
+    }
+    else if(comboBox == ui->cbToCharacters){
+        identifier = ui->tabWidget->tabText(CharactersTabIndex);
+
+        ui->cbWithTRBS_ONCC->setEnabled(false);
+        ui->cbWithTRBS_ONCC->setChecked(false);
+        ui->cbCellShading->setEnabled(false);
+        ui->cbCellShading->setChecked(false);
+        ui->cbNormals->setEnabled(false);
+        ui->cbNormals->setChecked(false);
+//#error add drag and drop to Extract TRAM with TRBS/ONCC
+        if(QString::compare(arg1,"TRAM ONI",Qt::CaseSensitive)==0){ //case sensitive is faster
+            ui->cbWithTRBS_ONCC->setEnabled(true);
+        }
+        else if(QString::compare(arg1,"TRBS DAE",Qt::CaseSensitive)==0){
+            ui->cbNormals->setEnabled(true);
+            ui->cbCellShading->setEnabled(true);
+        }
+
+    }
+    else if(comboBox == ui->cbToObjects){
+        identifier = ui->tabWidget->tabText(ObjectsTabIndex);
+
+        ui->cbTexture->setEnabled(false);
+        ui->cbTexture->setChecked(false);
+        ui->cbWithAnimation->setEnabled(false);
+        ui->cbWithAnimation->setChecked(false);
+
+        if(QString::compare(arg1,"M3GM ONI",Qt::CaseSensitive)==0){ //case sensitive is faster
+            ui->cbWithAnimation->setEnabled(true);
+        }
+        else if(QString::compare(arg1,"OBJ",Qt::CaseSensitive)==0){
+            ui->cbTexture->setEnabled(true);
+        }
+    }
+    else if(comboBox == ui->cbToLevels){
+        identifier = ui->tabWidget->tabText(LevelsTabIndex);
+
+        ui->cbSpecificFilesLevels->setEnabled(false);
+        ui->cbSpecificFilesLevels->setChecked(false);
+        ui->cbDatLevels->setEnabled(false);
+        ui->cbDatLevels->setChecked(false);
+        ui->cbBnvLevels->setEnabled(false);
+        ui->cbBnvLevels->setChecked(false);
+        ui->cbAdditionalSourcesLevels->setEnabled(false);
+        ui->cbAdditionalSourcesLevels->setChecked(false);
+        ui->cbGridsLevels->setEnabled(false);
+        ui->cbGridsLevels->setChecked(false);
+
+        if(arg1=="DAT"){ //case sensitive is faster
+            ui->cbSpecificFilesLevels->setEnabled(true);
+        }
+        else if(arg1=="ONI FILES"){ //case sensitive is faster
+            ui->cbDatLevels->setEnabled(true);
+        }
+        else if(arg1=="DAE"){
+            ui->cbBnvLevels->setEnabled(true);
+            ui->cbAdditionalSourcesLevels->setEnabled(true);
+        }
+    }
+    else{ // Misc
+        identifier = ui->tabWidget->tabText(MiscTabIndex);
+    }
+
+    identifier = identifier.toLower(); // get current tab title text (lower case)
+
+    comboBox->clear();
+
+    QStringList toUpdate=QStringList();
+
+    QStringList values=commandMap.values(identifier+"->"+arg1);
+
+    for (int i = values.size()-1; i >= 0; i--){ //By defaut MultiItems have the inversed order (http://qt-project.org/doc/qt-4.8/qhash.html#insertMulti)
+        toUpdate << values.at(i);
+    }
+
+    comboBox->addItems(toUpdate);
+}
+
+
+void MainWindow::on_actionWindows_triggered()
+{
+    ui->actionWindows->setChecked(true);
+    ui->actionMac_Windows_demo->setChecked(false);
+}
+
+void MainWindow::on_actionMac_Windows_demo_triggered()
+{
+    ui->actionMac_Windows_demo->setChecked(true);
+    ui->actionWindows->setChecked(false);
+}
+
+void MainWindow::on_pbRemoveSourceXML_clicked()
+{
+    removeTableContents( ui->twSourcesXML);
+}
+
+void MainWindow::on_pbRemoveSourceTextures_clicked()
+{
+    removeTableContents(ui->twSourcesTextures);
+}
+
+void MainWindow::on_pbRemoveSourceObjects_clicked()
+{
+    removeTableContents(ui->twSourcesObjects);
+}
+
+void MainWindow::on_pbRemoveSourceCharacters_clicked()
+{
+    removeTableContents(ui->twSourcesCharacters);
+}
+
+void MainWindow::on_pbRemoveSourceLevels_clicked()
+{
+    removeTableContents(ui->twSourcesLevels);
+}
+
+void MainWindow::on_pbRemoveSourceMisc_clicked()
+{
+    removeTableContents(ui->twSourcesMisc);
+}
+
+void MainWindow::on_pbClearSourcesXML_clicked()
+{
+    clearTableContents(ui->twSourcesXML);
+}
+
+void MainWindow::on_pbClearSourcesTextures_clicked()
+{
+    clearTableContents(ui->twSourcesTextures);
+}
+
+void MainWindow::on_pbClearSourcesObjects_clicked()
+{
+    clearTableContents(ui->twSourcesObjects);
+}
+
+void MainWindow::on_pbClearSourcesCharacters_clicked()
+{
+    clearTableContents(ui->twSourcesCharacters);
+}
+
+void MainWindow::on_pbClearSourcesLevels_clicked()
+{
+    clearTableContents(ui->twSourcesLevels);
+}
+
+void MainWindow::on_pbClearSourcesMisc_clicked()
+{
+    clearTableContents(ui->twSourcesMisc);
+}
+
+void MainWindow::removeTableContents(DropTableWidget *myTable){
+    int size = myTable->selectionModel()->selectedRows().size();
+
+    QMessageBox::StandardButton defaultButton = QMessageBox::NoButton; // default button for clear asking question, only customizable in mac os
+
+    if(size==0){
+        Util::showPopUp("Select a row first.");
+        return;
+    }
+
+#ifdef Q_OS_MAC
+    if(this->useYesAsDefaultWhenRemovingItems){
+        defaultButton = QMessageBox::Yes;
+    }
+    else{
+        defaultButton = QMessageBox::No;
+    }
+#endif
+
+
+    if(Util::showQuestionPopUp(this,"Are you sure you want to delete the selected rows?",defaultButton)){
+        for(int i=0; i<size; i++){
+            //myTable->removeRow(myTable->selectedItems().at(size-i-1)->row());
+            myTable->removeRow(myTable->selectionModel()->selectedRows().at(size-i-1).row());
+        }
+        updateItemsLoaded(myTable);
+        rowsWereChangedInDropTableWidget();
+    }
+}
+
+void MainWindow::clearTableContents(DropTableWidget *myTable){
+
+    QMessageBox::StandardButton defaultButton = QMessageBox::NoButton; // default button for clear asking question, only customizable in mac os
+
+    if(myTable->rowCount()==0){
+        Util::showPopUp("Nothing to clear.");
+        return;
+    }
+
+#ifdef Q_OS_MAC
+    if(this->useYesAsDefaultWhenRemovingItems){
+        defaultButton = QMessageBox::Yes;
+    }
+    else{
+        defaultButton = QMessageBox::No;
+    }
+#endif
+
+    if(Util::showQuestionPopUp(this,"Are you sure you want to clear the content?",defaultButton)){
+        clearTableNoPrompt(myTable);
+        updateItemsLoaded(myTable);
+        rowsWereChangedInDropTableWidget();
+    }
+
+}
+
+void MainWindow::clearTableNoPrompt(DropTableWidget *myTable){
+    myTable->clearContents();
+    myTable->setRowCount(0);
+}
+
+void MainWindow::on_actionPreferences_triggered()
+{
+    //Show preferences
+    Preferences *preferencesWindow = new Preferences(this,this->vagoSettings);
+    preferencesWindow->exec(); //it destroys itself when finished.
+}
+
+
+void MainWindow::closeEvent(QCloseEvent *event){
+    if(this->vagoSettings->value("AskSaveProject").toBool() && this->unsavedChangesExist){
+        QMessageBox::StandardButton result = askToSaveCurrentProject();
+        if(result == QMessageBox::StandardButton::Cancel){
+            event->ignore();
+            return;
+        }
+    }
+
+    // Exit application (this will also close all other windows which don't have parent, for instance ManualCommands)
+    QApplication::quit();
+}
+
+QMessageBox::StandardButton MainWindow::askToSaveCurrentProject(){
+    QMessageBox::StandardButton result =
+            Util::showQuestionPopUpWithCancel(this,"There are unsaved changes. Do you want to save the current project?", QMessageBox::StandardButton::Yes);
+
+    if(result == QMessageBox::StandardButton::Yes){
+        on_actionSave_triggered();
+    }
+
+    return result;
+}
+
+void MainWindow::on_cbToLevels_currentIndexChanged(const QString &arg1)
+{
+
+    if(ui->cbFromLevels->currentText()=="MASTER XML" && arg1=="DAT"){
+        ui->cbDatLevels->setEnabled(true);
+    }
+    else if(ui->cbFromLevels->currentText()=="MASTER XML" && arg1=="ONI FILES"){
+        ui->cbDatLevels->setEnabled(false);
+        ui->cbDatLevels->setChecked(false);
+    }
+
+}
+
+void MainWindow::on_cbDatLevels_toggled(bool checked)
+{
+    ui->leTargetDatLevels->setEnabled(checked);
+}
+
+void MainWindow::on_cbBnvLevels_toggled(bool checked)
+{
+    ui->leBnvLevels->setEnabled(checked);
+    ui->cbGridsLevels->setEnabled(checked);
+    ui->cbGridsLevels->setChecked(checked);
+    if(checked && !projectIsLoading){
+        QString file=QFileDialog::getOpenFileName(this,"Choose the BNV.dae file...","./" , "All Files (*.*)");
+        if(!file.isEmpty()){
+            ui->leBnvLevels->setText(file);
+        }
+    }
+}
+
+void MainWindow::on_cbAdditionalSourcesLevels_toggled(bool checked)
+{
+    ui->leAdditSourcesLevels->setEnabled(checked);
+
+    if(checked && !projectIsLoading){
+        QStringList filesSelected=QFileDialog::getOpenFileNames(this,"Choose the additional .dae files...","./" , "All Files (*.*)");
+        QString filesJoined;
+        int size=filesSelected.size();
+
+        if(!filesSelected.isEmpty()){
+            for(int i=0; i<size-1; i++){
+                filesJoined+=filesSelected.at(i)+" ";
+            }
+            filesJoined+=filesSelected.at(size-1); //last doesn't have space after
+            ui->leAdditSourcesLevels->setText(filesJoined);
+        }
+
+    }
+}
+
+void MainWindow::on_cbWithTRBS_ONCC_toggled(bool checked)
+{
+    ui->leTRBS_ONCC->setEnabled(checked);
+}
+
+void MainWindow::on_actionCheck_OniSplit_version_triggered()
+{
+    QProcess myProcess;
+    myProcess.setWorkingDirectory(UtilVago::getAppPath());
+    myProcess.start(UtilVago::getOniSplitExecutable()+" -version");
+    myProcess.waitForFinished();
+
+    QString result=myProcess.readAllStandardOutput();
+
+    Util::showPopUp("This Vago version was built with base in OniSplit version "+GlobalVars::BuiltOniSplitVersion+"\n\nCurrent version is:\n"+result.trimmed());
+}
+
+void MainWindow::on_actionCheck_xmlTools_version_triggered()
+{
+    QProcess myProcess;
+    myProcess.setWorkingDirectory(UtilVago::getAppPath());
+    myProcess.start(UtilVago::getXmlToolsExecutable()+" --version");
+    myProcess.waitForFinished();
+    QString result=myProcess.readLine();
+
+    Util::showPopUp("This Vago version was built with base in XmlTools version "+GlobalVars::BuiltXmlToolsVersion+"\n\nCurrent version is:\n"+result.trimmed());
+}
+
+/**
+  Update items loaded
+**/
+void MainWindow::on_tabWidget_currentChanged(int)
+{
+    updateItemsLoaded(getCurrentTableWidget());
+}
+
+void MainWindow::updateItemsLoaded(DropTableWidget *currentTable){
+
+    int numItems=currentTable->rowCount();
+
+    this->itemsLoaded->setText(QString().setNum(numItems)+ (numItems==1?" item ":" items ") +"loaded");
+}
+
+void MainWindow::rowsWereChangedInDropTableWidget(){
+    // We have changed rows, we have now unsaved changes.
+    if(!this->unsavedChangesExist){
+        this->unsavedChangesExist = true;
+        setVagoWindowTitle();
+    }
+}
+
+void MainWindow::on_tbCommand_clicked()
+{
+    //We pass no parent because we want to have an independent window for ManualCommands,
+    //so we can minimize it or maximize indepently from the MainWindow
+    ManualCommands *commandsWindow = new ManualCommands();
+    commandsWindow->show(); //it destroys itself when finished.
+}
+
+void MainWindow::on_actionWorkspace_triggered()
+{
+    ui->actionWorkspace->setChecked(true);
+    ui->actionOther->setChecked(false);
+    this->outputFolder=this->workspaceLocation;
+    ui->tbOpenFolder->setToolTip("Open Vago workspace");
+    showSuccessStatusMessage("Vago is now outputting the NEW items for Vago workspace.");
+}
+
+void MainWindow::on_actionOther_triggered()
+{
+    QString newDir=QFileDialog::getExistingDirectory(this,"Choose the folder for output NEW files directly...",this->AeLocation+"/GameDataFolder");
+    newDir=Util::normalizePath(newDir);
+
+    if(newDir.isEmpty()){
+        ui->actionOther->setChecked(false);
+        return; //do nothing
+    }
+
+    if(newDir==this->workspaceLocation){
+        on_actionWorkspace_triggered(); //set it to vago workspace
+        return;
+    }
+
+    ui->actionOther->setChecked(true);
+    ui->actionWorkspace->setChecked(false);
+
+    this->outputFolder=newDir;
+
+    QString newDirName=Util::cutName(newDir);
+    ui->tbOpenFolder->setToolTip("Open "+newDirName+" output folder");
+    showSuccessStatusMessage("Vago is now outputting the NEW items for "+newDirName+".");
+}
+
+void MainWindow::on_actionView_log_triggered()
+{
+    UtilVago::openLogFile();
+}
+
+void MainWindow::on_actionOpen_AE_folder_triggered()
+{
+    QDesktopServices::openUrl(QUrl("file:///"+this->AeLocation));
+}
+
+void MainWindow::on_actionSave_Project_triggered()
+{
+
+    QString filePath = QFileDialog::getSaveFileName(this, tr("Save File"),
+                                                    this->vagoSettings->value("LastProjectPath").toString(),
+                                                    tr("Vago project files (*.vgp)"));
+
+    if(!filePath.isEmpty()){
+        saveProjectState(filePath);
+    }
+
+}
+
+// New Project
+void MainWindow::on_actionNew_Project_triggered()
+{
+    if(this->vagoSettings->value("AskSaveProject").toBool() && this->unsavedChangesExist){
+        QMessageBox::StandardButton result = askToSaveCurrentProject();
+        if(result == QMessageBox::StandardButton::Cancel){
+            return;
+        }
+    }
+
+    QList<DropTableWidget*> myTables = getAllTableWidgets();
+
+    for(DropTableWidget* const currTable : myTables){
+        clearTableNoPrompt(currTable);
+    }
+
+    this->lastProjectFilePath=""; // clear last project file path
+    this->unsavedChangesExist = false;
+
+    setVagoWindowTitle(); // update vago title
+}
+
+void MainWindow::on_actionSave_triggered()
+{
+    if(this->lastProjectFilePath.isEmpty()){
+        on_actionSave_Project_triggered();
+        return;
+    }
+
+    saveProjectState(this->lastProjectFilePath);
+}
+
+void MainWindow::on_actionLoad_Project_triggered()
+{
+
+    QString filePath = QFileDialog::getOpenFileName(this, tr("Load File"),
+                                                    this->vagoSettings->value("LastProjectPath").toString(),
+                                                    tr("Vago project files (*.vgp)"));
+    if(!filePath.isEmpty()){
+        loadProjectState(filePath);
+    }
+}
+
+void MainWindow::on_actionProject1_triggered()
+{
+    loadProjectState(this->ui->actionProject1->text());
+}
+
+void MainWindow::on_actionProject2_triggered()
+{
+    loadProjectState(this->ui->actionProject2->text());
+}
+
+void MainWindow::on_actionProject3_triggered()
+{
+    loadProjectState(this->ui->actionProject3->text());
+}
+
+void MainWindow::on_actionProject4_triggered()
+{
+    loadProjectState(this->ui->actionProject4->text());
+}
+
+void MainWindow::on_actionProject5_triggered()
+{
+    loadProjectState(this->ui->actionProject5->text());
+}
+
+QString MainWindow::getTypeConversion(DropTableWidget *myTable){
+    QString from,to;
+
+    if(myTable==ui->twSourcesXML){
+        from=ui->cbFromXML->currentText();
+        to=ui->cbToXML->currentText();
+    }
+    else if(myTable==ui->twSourcesTextures){
+        from=ui->cbFromTextures->currentText();
+        to=ui->cbToTextures->currentText();
+    }
+    else if(myTable==ui->twSourcesObjects){
+        from=ui->cbFromObjects->currentText();
+        to=ui->cbToObjects->currentText();
+    }
+    else if(myTable==ui->twSourcesCharacters){
+        from=ui->cbFromCharacters->currentText();
+        to=ui->cbToCharacters->currentText();
+    }
+    else if(myTable==ui->twSourcesLevels){
+        from=ui->cbFromLevels->currentText();
+        to=ui->cbToLevels->currentText();
+    }
+    else{
+        from=ui->cbFromMisc->currentText();
+        to=ui->cbToMisc->currentText();
+    }
+
+    return from + " > " + to;
+}
+
+//Drop table widget context menu
+void MainWindow::dtContextMenu(DropTableWidget* myTable, QContextMenuEvent *event){
+    QModelIndex index = myTable->indexAt(event->pos());
+
+    //item exists?
+    if(!index.isValid())
+        return;
+
+    if(myTable->selectionModel()->selectedRows().size()==0){ //No multiple rows selected
+        myTable->selectRow(myTable->itemAt(event->pos())->row()); //select all the row of the item clicked
+    }
+
+    QList<int> selectedRows = QList<int>();
+
+    foreach(QModelIndex rowItem, myTable->selectionModel()->selectedRows()){
+        selectedRows << rowItem.row();
+    }
+
+    std::unique_ptr<QMenu> menu = std::make_unique<QMenu>();
+    std::unique_ptr<QAction> copy =  std::make_unique<QAction>("Copy",myTable);
+    std::unique_ptr<QAction> moveUp = std::make_unique<QAction>("Move Up",myTable);
+    std::unique_ptr<QAction> moveDown = std::make_unique<QAction>("Move Down",myTable);
+    std::unique_ptr<QAction> changeOptions = std::make_unique<QAction>("Change To Current Options",myTable);
+    std::unique_ptr<QMenu> changeOutput = std::make_unique<QMenu>("Change Output for:");
+    std::unique_ptr<QAction> outWorkspace = std::make_unique<QAction>("Workspace",myTable);
+    std::unique_ptr<QAction> outCurrOutput = std::make_unique<QAction>("Current Output Folder",myTable);
+    std::unique_ptr<QAction> outOther = std::make_unique<QAction>("Other...",myTable);
+    std::unique_ptr<QAction> edisable = std::make_unique<QAction>("Enable/Disable",myTable);
+
+    menu->addAction(copy.get());
+    menu->addSeparator();
+    menu->addAction(moveUp.get());
+    menu->addAction(moveDown.get());
+    menu->addSeparator();
+    menu->addAction(changeOptions.get());
+    menu->addMenu(changeOutput.get());
+    changeOutput->addActions(QList<QAction*>() << outWorkspace.get() << outCurrOutput.get() << outOther.get());
+    menu->addAction(edisable.get());
+
+
+    //if it's in the first row it can't be setted up
+    if(selectedRows.at(0)==0){
+        moveUp->setEnabled(false);
+    }
+
+    //if we are at bottom we can't go down
+    if(selectedRows.at(selectedRows.size()-1)==myTable->rowCount()-1){
+        moveDown->setEnabled(false);
+    }
+
+    //Can we change the settings? (the conversion must be the same)
+    QString currentSettings = (getTypeConversion(myTable)); //call function at the mainWindow with a signal (different threads?)
+    foreach(int row, selectedRows){
+        if( myTable->item(row,1)->text() != currentSettings){ //If we find out any of the selected items can't be convert disable operation
+            changeOptions->setEnabled(false);
+            break;
+        }
+    }
+
+    QAction* selectedOption = menu->exec(event->globalPos());
+
+    if(selectedOption==copy.get()){
+        //Let's copy the contents to the clipboard
+
+        QString toCopy;
+
+        int size=selectedRows.size();
+
+        //Let's format it a bit...
+        for(int i=0; i<size; i++){
+            for(int j=0; j<myTable->columnCount(); j++){
+                toCopy+=myTable->item(selectedRows.at(i),j)->text();
+                if(j!=myTable->columnCount()-1){
+                    toCopy+="\t";
+                }
+            }
+            if(i!=size-1){
+                toCopy+="\n";
+            }
+        }
+
+        QApplication::clipboard()->setText(toCopy);
+        showSuccessStatusMessage(QString::number(size) + (size==1?" item ":" items ")+ "copied to the clipboard");
+    }
+    else if(selectedOption==moveUp.get()){
+        qSort(selectedRows); //let's order the selections by the row number, so we know exactly how to swap it
+        myTable->swapPositions(selectedRows,-1);
+        rowsWereChangedInDropTableWidget();
+    }
+    else if(selectedOption==moveDown.get()){
+        qSort(selectedRows);
+        myTable->swapPositions(selectedRows,+1);
+        rowsWereChangedInDropTableWidget();
+    }
+    else if(selectedOption==changeOptions.get()){
+        changeToCurrentSettings(selectedRows,myTable);
+    }
+    else if(selectedOption==outWorkspace.get()){
+        changeItemsOutput(myTable,selectedRows,this->workspaceLocation);
+    }
+    else if(selectedOption==outCurrOutput.get()){
+        changeItemsOutput(myTable,selectedRows,this->outputFolder);
+    }
+    else if(selectedOption==outOther.get()){
+
+        QString newDir=QFileDialog::getExistingDirectory(this,"Choose the folder for the output of the files selected...",this->AeLocation+"/GameDataFolder");
+        newDir=Util::normalizePath(newDir);
+
+        if(newDir.isEmpty()){
+            return; //do nothing
+        }
+
+        changeItemsOutput(myTable,selectedRows,newDir);
+
+    }
+    else if(selectedOption==edisable.get()){
+
+        int enabledCount=0, disabledCount=0;
+
+        for(int i=0; i<selectedRows.size(); i++){
+
+            for(int j=0; j<myTable->columnCount(); j++){
+                QTableWidgetItem *currentItem=myTable->item(selectedRows.at(i),j);
+
+                if(currentItem->background()!=myTable->disabledBackStyle){
+                    myTable->setDisableStyleWidgetItem(currentItem);
+                    if(j==0){ //Only count the row, not the columns
+                        disabledCount++;
+                    }
+                }
+                else{ //reset to initial state (enable)
+                    myTable->resetStyleWidgetItem(currentItem);
+                    if(j==0){
+                        enabledCount++;
+                    }
+                }
+            }
+        }
+
+        QString result;
+
+        if(enabledCount!=0){
+            result+=QString::number(enabledCount) + (enabledCount==1?" item ":" items ") + "Enabled";
+        }
+        if(enabledCount!=0 && disabledCount!=0){
+            result+=" and ";
+        }
+        if(disabledCount!=0){
+            result+=QString::number(disabledCount) + (disabledCount==1?" item ":" items ") + "Disabled";
+        }
+
+        rowsWereChangedInDropTableWidget();
+        showSuccessStatusMessage(result);
+    }
+}
+
+void MainWindow::changeToCurrentSettings(QList<int> rows, DropTableWidget* myTable){
+    //construct a command for each one
+    //Output a status message saying the number of changed files
+    QString fromTo=getTypeConversion(myTable);
+    QString from = QString(fromTo).remove(fromTo.indexOf(" >"),fromTo.size()-1); //parse the string to get the from, only 1 time parsed by each group of files = very fast
+    QString to = QString(fromTo).remove(0,fromTo.lastIndexOf("> ")+2); //+2 to start after "> "
+
+    QString command;
+
+    foreach(int row, rows){
+
+        command=getCommand(myTable,getFileOutputFolder(fromTo,myTable->getOutputAbsolute(row)),from,to,myTable->getFileAbsolute(row));
+
+        if(command.isEmpty()){ //something wrong was happening (not inputted a texture name?)
+            return; //stop changing settings
+        }
+
+        myTable->item(row,2)->setText(command); //update settings to the current row
+        myTable->updateTableToolTips(row);
+    }
+
+    rowsWereChangedInDropTableWidget();
+    showSuccessStatusMessage(QString::number(rows.size()) + (rows.size()==1?" item ":" items ")+ "changed to the current settings");
+}
+
+void MainWindow::changeItemsOutput(DropTableWidget* myTable, QList<int> rows, QString newOutput){
+
+    QString command, currentAbsoluteFile, fromTo, from, to;
+
+    foreach(int row, rows){ //No optimization possible here, commands may be different
+        fromTo=myTable->item(row,1)->text();
+        from = QString(fromTo).remove(fromTo.indexOf(" >"),fromTo.size()-1); //parse the string to get the from
+        to = QString(fromTo).remove(0,fromTo.lastIndexOf("> ")+2); //+2 to start after "> "
+
+        currentAbsoluteFile=myTable->getFileAbsolute(row);
+        command=getCommand(myTable,getFileOutputFolder(fromTo,newOutput),from,to,currentAbsoluteFile);
+
+        if(command.isEmpty()){ //something wrong was happening (not inputted a texture name?)
+            return; //stop changing output
+        }
+
+        myTable->item(row,2)->setText(command); //update command to the current row
+        myTable->updateTableToolTips(row);
+    }
+
+    rowsWereChangedInDropTableWidget();
+    showSuccessStatusMessage(QString::number(rows.size()) + (rows.size()==1?" item ":" items ")+ "changed the output to "+(newOutput!=this->workspaceLocation?Util::cutName(newOutput):"Vago workspace"));
+}
+
+QString MainWindow::getCommand(DropTableWidget* myTable, QString myOutputFolder, QString from, QString to , QString file){
+
+    QString tabTitle=ui->tabWidget->tabText(ui->tabWidget->currentIndex()).toLower(); // get current tab title
+
+    if(myTable==ui->twSourcesXML){ //So we only need to parse one command.
+        return fileParsingXML(tabTitle, myOutputFolder,from,to,file);
+    }
+    else if(myTable==ui->twSourcesTextures){
+        return fileParsingTextures(tabTitle, myOutputFolder,from,to,file);
+    }
+    else if(myTable==ui->twSourcesObjects){
+        return fileParsingObjects(tabTitle, myOutputFolder,from,to,file);
+    }
+    else if(myTable==ui->twSourcesCharacters){
+        return fileParsingCharacters(tabTitle, myOutputFolder,from,to,file);
+    }
+    else if(myTable==ui->twSourcesLevels){
+        return fileParsingLevels(tabTitle, myOutputFolder,from,to,file);
+    }
+    else{
+        return fileParsingMisc(myOutputFolder,from,to,file);
+    }
+
+}
+
+void MainWindow::connectSlots(){
+
+    //This signal is for thread that is working setup the progress bar (make it visible and set it's min-max)
+    connect(myConverter, SIGNAL(setupPB(int)), this, SLOT(TsetupProgressBar(int)), Qt::BlockingQueuedConnection);
+
+    //This signal is for thread that is working can update the progress bar of the gui
+    connect(myConverter, SIGNAL(taskDone()), this, SLOT(TupdateProgressBar()),Qt::BlockingQueuedConnection);
+
+    //This signal is for thread that is working can show the result of a conversion
+    connect(myConverter, SIGNAL(resultConversion(QString,int)), this, SLOT(TresultConversion(QString,int)));
+
+    //This signal is for thread that is working notify the gui thread that the conversion was aborted with sucess
+    connect(myConverter, SIGNAL(conversionAborted()), this, SLOT(TconversionAborted()));
+
+    // This signal is to the user be able to terminate a conversion (OniSplit process in class myConverter will be terminated)
+    connect(this, SIGNAL(terminateCurrProcess()), myConverter, SLOT(terminateCurrProcess()));
+
+    //Drop signal for General table
+    connect(ui->twSourcesXML, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addFilesSource(DropTableWidget*,QStringList)));
+
+    //Drop signal for Textures table
+    connect(ui->twSourcesTextures, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addFilesSource(DropTableWidget*,QStringList)));
+
+    //Drop signal for Objects table
+    connect(ui->twSourcesObjects, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addFilesSource(DropTableWidget*,QStringList)));
+
+    //Drop signal for Characters table
+    connect(ui->twSourcesCharacters, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addFilesSource(DropTableWidget*,QStringList)));
+
+    //Drop signal for Levels table
+    connect(ui->twSourcesLevels, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addFilesSource(DropTableWidget*,QStringList)));
+
+    //Drop signal for Misc table
+    connect(ui->twSourcesMisc, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addFilesSource(DropTableWidget*,QStringList)));
+
+    //Context menu for General table
+    connect(ui->twSourcesXML, SIGNAL(dtContextMenu(DropTableWidget*,QContextMenuEvent*)), this, SLOT(dtContextMenu(DropTableWidget*,QContextMenuEvent*)));
+
+    //Context menu for Textures table
+    connect(ui->twSourcesTextures, SIGNAL(dtContextMenu(DropTableWidget*,QContextMenuEvent*)), this, SLOT(dtContextMenu(DropTableWidget*,QContextMenuEvent*)));
+
+    //Context menu for Objects table
+    connect(ui->twSourcesObjects, SIGNAL(dtContextMenu(DropTableWidget*,QContextMenuEvent*)), this, SLOT(dtContextMenu(DropTableWidget*,QContextMenuEvent*)));
+
+    //Context menu for Characters table
+    connect(ui->twSourcesCharacters, SIGNAL(dtContextMenu(DropTableWidget*,QContextMenuEvent*)), this, SLOT(dtContextMenu(DropTableWidget*,QContextMenuEvent*)));
+
+    //Context menu for Levels table
+    connect(ui->twSourcesLevels, SIGNAL(dtContextMenu(DropTableWidget*,QContextMenuEvent*)), this, SLOT(dtContextMenu(DropTableWidget*,QContextMenuEvent*)));
+
+    //Context menu for Misc table
+    connect(ui->twSourcesMisc, SIGNAL(dtContextMenu(DropTableWidget*,QContextMenuEvent*)), this, SLOT(dtContextMenu(DropTableWidget*,QContextMenuEvent*)));
+}
+
+void MainWindow::saveProjectState(const QString &filePath)
+{
+
+    QList<DropTableWidget*> tableWidgets = getAllTableWidgets();
+
+    pugi::xml_document doc;
+
+    pugi::xml_node rootNode = doc.append_child("VagoProject");
+    rootNode.append_attribute("vagoVersion").set_value(GlobalVars::LastCompatibleVersion.toUtf8().constData());
+
+    foreach(DropTableWidget* const &myTable, tableWidgets){
+        saveProjectWidget(rootNode, myTable);
+    }
+
+    if(!doc.save_file(filePath.toUtf8().constData(), PUGIXML_TEXT("\t"), pugi::format_default | pugi::format_write_bom, pugi::xml_encoding::encoding_utf8)){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "An error ocurred while trying to save the project file. Please try another path.");
+        return;
+    }
+
+    this->vagoSettings->setValue("LastProjectPath",QFileInfo(filePath).absoluteDir().path());
+
+    this->lastProjectFilePath = filePath;
+    this->unsavedChangesExist = false;
+
+    addNewRecentProject(filePath);
+
+    setVagoWindowTitle();
+
+    showSuccessStatusMessage("Project saved sucessfully.");
+}
+
+void MainWindow::saveProjectWidget(pugi::xml_node &rootNode, DropTableWidget* table)
+{
+    QString from;
+    QString to;
+    QString tabName = getTabNameByTableWidget(table);
+
+    pugi::xml_node currentNodeTable = rootNode.append_child("tempName");
+    pugi::xml_node options;
+
+    if(table==ui->twSourcesXML){ //So we only need to parse one command.
+        from = ui->cbFromXML->currentText().toUtf8().constData();
+        to = ui->cbToXML->currentText().toUtf8().constData();
+    }
+    else if(table==ui->twSourcesTextures){
+        from = ui->cbFromTextures->currentText().toUtf8().constData();
+        to = ui->cbToTextures->currentText().toUtf8().constData();
+        options = currentNodeTable.append_child("Options");
+        options.append_attribute("type").set_value(Util::qStrToCstr(getTextureRBCheckedTypeTexture()->text()));
+        options.append_attribute("genMipMaps").set_value(Util::boolToCstr(ui->cbMipMapsTextures->isChecked()));
+        options.append_attribute("noUwrap").set_value(Util::boolToCstr(ui->cbNoUwrap->isChecked()));
+        options.append_attribute("noVwrap").set_value(Util::boolToCstr(ui->cbNoVwrap->isChecked()));
+        options.append_attribute("large").set_value(Util::boolToCstr(ui->cbLarge->isChecked()));
+        options.append_attribute("envMap").set_value(Util::boolToCstr(ui->cbEnvMap->isChecked()));
+        options.append_attribute("envMapValue").set_value(Util::qStrToCstr(ui->leEnvMapTexture->text()));
+    }
+    else if(table==ui->twSourcesCharacters){
+        from = ui->cbFromCharacters->currentText().toUtf8().constData();
+        to = ui->cbToCharacters->currentText().toUtf8().constData();
+        options = currentNodeTable.append_child("Options");
+        options.append_attribute("cellShading").set_value(Util::boolToCstr(ui->cbCellShading->isChecked()));
+        options.append_attribute("normals").set_value(Util::boolToCstr(ui->cbNormals->isChecked()));
+        options.append_attribute("extractTRBSONCC").set_value(Util::boolToCstr(ui->cbWithTRBS_ONCC->isChecked()));
+        options.append_attribute("extractTRBSONCCValue").set_value(Util::qStrToCstr(ui->leTRBS_ONCC->text()));
+    }
+    else if(table==ui->twSourcesObjects){
+        from = ui->cbFromObjects->currentText().toUtf8().constData();
+        to = ui->cbToObjects->currentText().toUtf8().constData();
+        options = currentNodeTable.append_child("Options");
+        options.append_attribute("texture").set_value(Util::boolToCstr(ui->cbTexture->isChecked()));
+        options.append_attribute("textureValue").set_value(Util::qStrToCstr(ui->leTextureName->text()));
+        options.append_attribute("withAnimation").set_value(Util::boolToCstr(ui->cbWithAnimation->isChecked()));
+        options.append_attribute("withAnimationValue").set_value(Util::qStrToCstr(ui->leAnimationName->text()));
+    }
+    else if(table==ui->twSourcesLevels){
+        from = ui->cbFromLevels->currentText().toUtf8().constData();
+        to = ui->cbToLevels->currentText().toUtf8().constData();
+        options = currentNodeTable.append_child("Options");
+        options.append_attribute("extractWithFiles").set_value(Util::boolToCstr(ui->cbSpecificFilesLevels->isChecked()));
+        options.append_attribute("extractWithFilesValue").set_value(Util::qStrToCstr(ui->leSpecificFilesLevels->text()));
+        options.append_attribute("datFilename").set_value(Util::boolToCstr(ui->cbDatLevels->isChecked()));
+        options.append_attribute("datFilenameValue").set_value(Util::qStrToCstr(ui->leTargetDatLevels->text()));
+        options.append_attribute("bnvSource").set_value(Util::boolToCstr(ui->cbBnvLevels->isChecked()));
+        options.append_attribute("bnvSourceValue").set_value(Util::qStrToCstr(ui->leBnvLevels->text()));
+        options.append_attribute("generateGrids").set_value(Util::boolToCstr(ui->cbGridsLevels->isChecked()));
+        options.append_attribute("additionalSources").set_value(Util::boolToCstr(ui->cbAdditionalSourcesLevels->isChecked()));
+        options.append_attribute("additionalSourcesValue").set_value(Util::qStrToCstr(ui->leAdditSourcesLevels->text()));
+    }
+    else{
+        from = ui->cbFromMisc->currentText().toUtf8().constData();
+        to = ui->cbToMisc->currentText().toUtf8().constData();
+    }
+
+    currentNodeTable.set_name(tabName.toUtf8().constData());
+
+    currentNodeTable.append_attribute("from").set_value(from.toUtf8().constData());
+    currentNodeTable.append_attribute("to").set_value(to.toUtf8().constData());
+
+
+    for(int i=0; i<table->rowCount(); i++){
+
+        QString currFileFolder = table->item(i,0)->text();
+        QString currFromTo = table->item(i,1)->text();
+        QString currCommand = table->item(i,2)->text();
+
+        pugi::xml_node currentRow = currentNodeTable.append_child("Row");
+
+
+        currentRow.append_attribute("fileFolder").set_value(Util::qStrToCstr(currFileFolder));
+        currentRow.append_attribute("fromTo").set_value(Util::qStrToCstr(currFromTo));
+        currentRow.append_attribute("command").set_value(Util::qStrToCstr(currCommand));
+
+        if(table->item(i,2)->background()==table->disabledBackStyle){
+            currentRow.append_attribute("disabled").set_value(true);
+        }
+
+    }
+}
+
+QRadioButton* MainWindow::getTextureRBCheckedTypeTexture()
+{
+    if(ui->rbBGR32->isChecked()){
+        return ui->rbBGR32;
+    }
+    else if(ui->rbBGRA32->isChecked()){
+        return ui->rbBGRA32;
+    }
+    else if(ui->rbBGR555->isChecked()){
+        return ui->rbBGR555;
+    }
+    else if(ui->rbBGRA5551->isChecked()){
+        return ui->rbBGRA5551;
+    }
+    else if(ui->rbBGRA444->isChecked()){
+        return ui->rbBGRA444;
+    }
+    else{ //dxt1 checked
+        return ui->rbDxt1;
+    }
+}
+
+QRadioButton* MainWindow::getTextureRBTypeTextureByName(const QString &texType)
+{
+    if(QString::compare(texType,ui->rbBGR32->text(),Qt::CaseSensitive)==0){
+        return ui->rbBGR32;
+    }
+    else if(QString::compare(texType,ui->rbBGRA32->text(),Qt::CaseSensitive)==0){
+        return ui->rbBGRA32;
+    }
+    else if(QString::compare(texType, ui->rbBGR555->text(),Qt::CaseSensitive)==0){
+        return ui->rbBGR555;
+    }
+    else if(QString::compare(texType,ui->rbBGRA5551->text(),Qt::CaseSensitive)==0){
+        return ui->rbBGRA5551;
+    }
+    else if(QString::compare(texType,ui->rbBGRA444->text(),Qt::CaseSensitive)==0){
+        return ui->rbBGRA444;
+    }
+    else{ //dxt1
+        return ui->rbDxt1;
+    }
+
+}
+
+void MainWindow::setVagoWindowTitle(){
+
+    QString vagoTitle = "Vago v"+GlobalVars::AppVersion + " - ";
+
+    if(this->lastProjectFilePath.isEmpty()){
+        vagoTitle += "Untitled";
+    }
+    else{
+        vagoTitle += Util::cutNameWithoutBackSlash(this->lastProjectFilePath);
+    }
+
+    if(this->unsavedChangesExist){
+        vagoTitle += "*";
+    }
+
+    setWindowTitle(vagoTitle);
+}
+
+DropTableWidget* MainWindow::getCurrentTableWidget(){
+
+    return getTableWidgetByTabName(ui->tabWidget->tabText(ui->tabWidget->currentIndex()));
+
+}
+
+DropTableWidget* MainWindow::getTableWidgetByTabName(const QString &tabName){
+
+    if(tabName.compare("XML",Qt::CaseSensitive)==0){ //case sentive is faster
+        return ui->twSourcesXML;
+    }
+    else if(tabName.compare("Textures",Qt::CaseSensitive)==0){
+        return ui->twSourcesTextures;
+    }
+    else if(tabName.compare("Characters",Qt::CaseSensitive)==0){
+        return ui->twSourcesCharacters;
+    }
+    else if(tabName.compare("Objects",Qt::CaseSensitive)==0){
+        return ui->twSourcesObjects;
+    }
+    else if(tabName.compare("Levels",Qt::CaseSensitive)==0){
+        return ui->twSourcesLevels;
+    }
+    else{
+        return ui->twSourcesMisc;
+    }
+
+}
+
+QString MainWindow::getCurrentTabName(){
+    return ui->tabWidget->tabText(ui->tabWidget->currentIndex());
+}
+
+QString MainWindow::getTabNameByTableWidget(DropTableWidget* table){
+
+    if(table == ui->twSourcesXML){
+        return ui->tabWidget->tabText(XMLTabIndex);
+    }
+    else if(table == ui->twSourcesTextures){
+        return ui->tabWidget->tabText(TexturesTabIndex);
+    }
+    else if(table == ui->twSourcesCharacters){
+        return ui->tabWidget->tabText(CharactersTabIndex);
+    }
+    else if(table == ui->twSourcesObjects){
+        return ui->tabWidget->tabText(ObjectsTabIndex);
+    }
+    else if(table == ui->twSourcesLevels){
+        return ui->tabWidget->tabText(LevelsTabIndex);
+    }
+    else{
+        return ui->tabWidget->tabText(MiscTabIndex);
+    }
+
+}
+
+QList<DropTableWidget*> MainWindow::getAllTableWidgets()
+{
+    QList<DropTableWidget*> tableWidgets;
+
+    tableWidgets << ui->twSourcesXML << ui->twSourcesTextures << ui->twSourcesCharacters
+                 << ui->twSourcesObjects << ui->twSourcesLevels << ui->twSourcesMisc;
+
+    return tableWidgets;
+}
+
+void MainWindow::loadProjectState(const QString &filePath)
+{
+
+    this->projectIsLoading = true;
+
+    if(this->vagoSettings->value("AskSaveProject").toBool() && this->unsavedChangesExist){
+        QMessageBox::StandardButton result = askToSaveCurrentProject();
+        if(result == QMessageBox::StandardButton::Cancel){
+            this->projectIsLoading = false;
+            return;
+        }
+    }
+
+    QString statusError = "Couldn't load project.";
+
+    pugi::xml_document doc;
+
+    pugi::xml_parse_result result = doc.load_file(Util::qStrToCstr(filePath));
+
+    if(result.status!=pugi::status_ok){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "An error ocurred while loading project file.\n" + QString(result.description()));
+        showErrStatusMessage(statusError);
+        this->projectIsLoading = false;
+        return;
+    }
+
+
+    if(QString(doc.root().first_child().name()) != "VagoProject"){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, QString(doc.root().name()) + "The file opened is not a valid VagoProject file. Load aborted.");
+        showErrStatusMessage(statusError);
+        this->projectIsLoading = false;
+        return;
+    }
+
+    QString projVagoVersion;
+
+    try{
+        projVagoVersion = QString(doc.select_node("/VagoProject/@vagoVersion").attribute().value());
+    }
+    catch (const pugi::xpath_exception& e)
+    {
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't find the vagoVersion of the current project. Load aborted.\n" + QString(e.what()));
+        showErrStatusMessage(statusError);
+        this->projectIsLoading = false;
+        return;
+    }
+
+    if(!projVagoVersion.startsWith(GlobalVars::LastCompatibleVersion)){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "The project that you are trying to load seems it is not compatible with your Vago Version. Please update Vago and try again.");
+        showErrStatusMessage(statusError);
+        this->projectIsLoading = false;
+        return;
+    }
+
+    // After the initial validations begin loading the project data
+
+    QList<DropTableWidget*> tableWidgets = getAllTableWidgets();
+
+    try{
+        foreach(DropTableWidget* const &myTable, tableWidgets){
+            loadProjectWidget(doc, myTable);
+        }
+    }
+    catch(const std::exception& e){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't load the vago project. Error: " + QString(e.what()));
+        showErrStatusMessage(statusError);
+        this->projectIsLoading = false;
+        return;
+    }
+
+    this->vagoSettings->setValue("LastProjectPath",QFileInfo(filePath).absoluteDir().path());
+
+    this->lastProjectFilePath = filePath;
+    this->unsavedChangesExist = false;
+
+    addNewRecentProject(filePath);
+
+    setVagoWindowTitle();
+
+    this->projectIsLoading = false;
+
+    showSuccessStatusMessage("Project loaded sucessfully.");
+}
+
+
+void MainWindow::loadProjectWidget(pugi::xml_document &doc, DropTableWidget* table)
+{
+    QString tabName = getTabNameByTableWidget(table);
+    QString from (doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/@from")).attribute().value());
+    QString to (doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/@to")).attribute().value());
+
+    if(table==ui->twSourcesXML){
+        ui->cbFromXML->setCurrentText(from);
+        on_cbFromXML_currentIndexChanged(from);
+        ui->cbToXML->setCurrentText(to);
+    }
+    else if(table==ui->twSourcesTextures){
+        //ui->cbFromTextures->setCurrentText(from);
+        on_cbFromTextures_currentIndexChanged(from);
+        ui->cbToTextures->setCurrentText(to);
+
+        getTextureRBTypeTextureByName((doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@type")).attribute().value()))->setChecked(true);
+        ui->cbMipMapsTextures->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@genMipMaps")).attribute().as_bool());
+        ui->cbNoUwrap->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@noUwrap")).attribute().as_bool());
+        ui->cbNoVwrap->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@noVwrap")).attribute().as_bool());
+        ui->cbLarge->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@large")).attribute().as_bool());
+        ui->cbEnvMap->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@envMap")).attribute().as_bool());
+        ui->leEnvMapTexture->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@envMapValue")).attribute().value()));
+    }
+    else if(table==ui->twSourcesCharacters){
+        ui->cbFromCharacters->setCurrentText(from);
+        on_cbFromCharacters_currentIndexChanged(from);
+        ui->cbToCharacters->setCurrentText(to);
+
+
+        ui->cbCellShading->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@cellShading")).attribute().as_bool());
+        ui->cbNormals->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@normals")).attribute().as_bool());
+        ui->cbWithTRBS_ONCC->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@extractTRBSONCC")).attribute().as_bool());
+        ui->leTRBS_ONCC->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@extractTRBSONCCValue")).attribute().value()));
+    }
+    else if(table==ui->twSourcesObjects){
+        ui->cbFromObjects->setCurrentText(from);
+        on_cbFromObjects_currentIndexChanged(from);
+        ui->cbToObjects->setCurrentText(to);
+
+        ui->cbTexture->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@texture")).attribute().as_bool());
+        ui->leTextureName->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@textureValue")).attribute().value()));
+        ui->cbWithAnimation->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@withAnimation")).attribute().as_bool());
+        ui->leAnimationName->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@withAnimationValue")).attribute().value()));
+    }
+    else if(table==ui->twSourcesLevels){
+        ui->cbFromLevels->setCurrentText(from);
+        on_cbFromLevels_currentIndexChanged(from);
+        ui->cbToLevels->setCurrentText(to);
+
+        ui->cbSpecificFilesLevels->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@extractWithFiles")).attribute().as_bool());
+        ui->leSpecificFilesLevels->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@extractWithFilesValue")).attribute().value()));
+        ui->cbDatLevels->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@datFilename")).attribute().as_bool());
+        ui->leTargetDatLevels->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@datFilenameValue")).attribute().value()));
+        ui->cbBnvLevels->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@bnvSource")).attribute().as_bool());
+        ui->leBnvLevels->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@bnvSourceValue")).attribute().value()));
+        ui->cbGridsLevels->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@generateGrids")).attribute().as_bool());
+        ui->cbAdditionalSourcesLevels->setChecked(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@additionalSources")).attribute().as_bool());
+        ui->leAdditSourcesLevels->setText(QString(doc.select_node(Util::qStrToCstr("/VagoProject/"+tabName+"/Options/@additionalSourcesValue")).attribute().value()));
+    }
+    else{
+        ui->cbFromMisc->setCurrentText(from);
+        on_cbFromMisc_currentIndexChanged(from);
+        ui->cbToMisc->setCurrentText(to);
+    }
+
+    // Clean previous rows
+    clearTableNoPrompt(table);
+
+    for(const pugi::xpath_node &xPathNode : doc.select_nodes(Util::qStrToCstr("/VagoProject/"+tabName+"/Row"))){
+        pugi::xml_node currNode = xPathNode.node();
+
+        QString currFileFolder = currNode.attribute("fileFolder").value();
+        QString currFromTo = currNode.attribute("fromTo").value();
+        QString currCommand = currNode.attribute("command").value();
+
+        bool isToDisable = false;
+        pugi::xml_attribute disabledAttr = currNode.attribute("disabled");
+        isToDisable = disabledAttr.empty() ? false : disabledAttr.as_bool();
+
+        addRowTable(table,currFileFolder,currFromTo,currCommand, isToDisable);
+    }
+}
+
+void MainWindow::saveRecentProjects(){
+    for(int i=0; i<this->recentProjectsList.size(); i++){
+        this->vagoSettings->setValue("RecentProject" + QString::number(i+1), recentProjectsList[i]);
+    }
+}
+
+void MainWindow::loadRecentProjects(){
+    for(int i=0; i<this->recentProjectsMaxSize; i++){
+
+        QString currProj = this->vagoSettings->value("RecentProject" + QString::number(i+1)).toString();
+
+        if(!currProj.isEmpty()){
+            recentProjectsList.append(currProj);
+        }
+        else{
+            break;
+        }
+    }
+
+    reloadRecentProjectsMenu();
+
+}
+
+void MainWindow::addNewRecentProject(const QString &filePath){
+
+    // If the new project is equal to the last one simply ignore
+    if(filePath == this->vagoSettings->value("RecentProject1").toString()){
+        return;
+    }
+
+    // If the item already exists in our list remove it, so it can go to the top again
+    for(auto it = this->recentProjectsList.begin(); it != this->recentProjectsList.end();){
+        if(*it == filePath){
+            it = this->recentProjectsList.erase(it);
+        }
+        else{
+            it++;
+        }
+    }
+
+    // if we gonna overflow our list, remove the older item to reserve space to the new one
+    if(this->recentProjectsList.size()==this->recentProjectsMaxSize){
+        this->recentProjectsList.removeLast();
+    }
+
+    this->vagoSettings->setValue("LastProjectPath",QFileInfo(filePath).absoluteDir().path());
+
+    // add new recent file
+    this->recentProjectsList.prepend(filePath);
+
+    reloadRecentProjectsMenu();
+
+    saveRecentProjects();
+}
+
+void MainWindow::reloadRecentProjectsMenu(){
+
+    ui->menuRecent_Projects->setEnabled(false);
+    ui->actionProject1->setVisible(false);
+    ui->actionProject2->setVisible(false);
+    ui->actionProject3->setVisible(false);
+    ui->actionProject4->setVisible(false);
+    ui->actionProject5->setVisible(false);
+
+    {
+        QList<QString>::const_iterator it;
+        int i;
+        for(it = recentProjectsList.cbegin(), i=0; it != recentProjectsList.cend(); it++, i++){
+
+            QAction* currAction = nullptr;
+
+            switch (i){
+            case 0:
+                currAction = ui->actionProject1;
+                break;
+            case 1:
+                currAction = ui->actionProject2;
+                break;
+            case 2:
+                currAction = ui->actionProject3;
+                break;
+            case 3:
+                currAction = ui->actionProject4;
+                break;
+            case 4:
+                currAction = ui->actionProject5;
+                break;
+            }
+
+            if(currAction){
+                ui->menuRecent_Projects->setEnabled(true);
+                currAction->setText(*it);
+                currAction->setVisible(true);
+            }
+        }
+    }
+
+}
Index: s10k/Vago/mainwindow.h
===================================================================
--- s10k/Vago/mainwindow.h	(revision 1092)
+++ s10k/Vago/mainwindow.h	(revision 1092)
@@ -0,0 +1,292 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include "utilvago.h"
+#include "preferences.h"
+#include "manualcommands.h"
+#include "about.h"
+#include "packagewizard.h"
+#include "soundwizard.h"
+#include "bgimagewizard.h"
+#include "wmwizard.h"
+#include "converter.h"
+#include "xmltoolsinterface.h"
+#include "wizardfactory.h"
+
+#include <QMainWindow>
+#include <QMessageBox>
+#include <QProcess>
+#include <QColor>
+#include <QPalette>
+#include <QFileDialog>
+#include <QUrl>
+#include <QDesktopServices>
+#include <QErrorMessage>
+#include <QTextCodec>
+#include <QProgressBar>
+#include <QComboBox>
+#include <QtNetwork/QNetworkAccessManager>
+#include <QtNetwork/QNetworkRequest>
+#include <QtNetwork/QNetworkReply>
+#include <QCloseEvent>
+#include <QScriptEngine>
+#include <QScriptValueIterator>
+#include <droptablewidget.h>
+#include <pugixml.hpp>
+#ifdef Q_OS_WIN
+#include <QWinTaskbarProgress>
+#include <QWinTaskbarButton>
+#endif
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+
+    ~MainWindow();
+
+protected:
+    void closeEvent(QCloseEvent *event);
+
+private slots:
+    void applicationWasLoaded();
+
+    void on_actionExit_triggered();
+
+    void on_actionAbout_triggered();
+
+    void on_tbOni_clicked();
+
+    void on_tbAE_clicked();
+
+    void on_tbOpenFolder_clicked();
+
+    void on_cbEnvMap_toggled(bool checked);
+
+    void on_cbTexture_toggled(bool checked);
+
+    void on_actionCheck_For_Updates_triggered();
+
+    void on_pbAddSourceXML_clicked();
+
+    void on_pbConvert_clicked();
+
+    void TsetupProgressBar(int max);
+
+    void TupdateProgressBar();
+
+    void TresultConversion(QString result, int numErrors);
+
+    void TconversionAborted();
+
+    void on_actionWindows_triggered();
+
+    void on_actionMac_Windows_demo_triggered();
+
+    void on_pbClearSourcesXML_clicked();
+
+    void on_pbRemoveSourceXML_clicked();
+
+    void on_pbAddSourceTextures_clicked();
+
+    void on_pbRemoveSourceTextures_clicked();
+
+    void on_pbClearSourcesTextures_clicked();
+
+    void on_cbFromTextures_currentIndexChanged(const QString &arg1);
+
+    void on_cbFromObjects_currentIndexChanged(const QString &arg1);
+
+    void on_cbFromLevels_currentIndexChanged(const QString &arg1);
+
+    void on_cbFromMisc_currentIndexChanged(const QString &arg1);
+
+    void on_pbAddSourceObjects_clicked();
+
+    void on_pbAddSourceLevels_clicked();
+
+    void on_pbAddSourceMisc_clicked();
+
+    void on_pbRemoveSourceObjects_clicked();
+
+    void on_pbRemoveSourceLevels_clicked();
+
+    void on_pbRemoveSourceMisc_clicked();
+
+    void on_pbClearSourcesObjects_clicked();
+
+    void on_pbClearSourcesLevels_clicked();
+
+    void on_pbClearSourcesMisc_clicked();
+
+    void on_actionPreferences_triggered();
+
+    void on_cbToLevels_currentIndexChanged(const QString &arg1);
+
+    void on_cbDatLevels_toggled(bool checked);
+
+    void on_actionCheck_OniSplit_version_triggered();
+
+    void addFilesSource(DropTableWidget *myTable, QStringList files); //for drag 'n drop
+
+    void dtContextMenu(DropTableWidget* myTable, QContextMenuEvent *event); //Context menu options for table widgets
+
+    void checkVagoLastVersion(QNetworkReply *result); //check vago last version
+
+    void on_cbBnvLevels_toggled(bool checked);
+
+    void on_cbAdditionalSourcesLevels_toggled(bool checked);
+
+    void on_tbCommand_clicked();
+
+    void on_actionWorkspace_triggered();
+
+    void on_actionOther_triggered();
+
+    void on_actionView_log_triggered();
+
+    void on_actionAE_Package_Creator_triggered();
+
+    void on_cbFromCharacters_currentIndexChanged(const QString &arg1);
+
+    void on_pbAddSourceCharacters_clicked();
+
+    void on_pbRemoveSourceCharacters_clicked();
+
+    void on_pbClearSourcesCharacters_clicked();
+
+    void on_actionSound_Wizard_triggered();
+
+    void on_actionCheck_xmlTools_version_triggered();
+
+    void on_actionOpen_AE_folder_triggered();
+
+    void on_cbWithTRBS_ONCC_toggled(bool checked);
+
+    void on_cbWithAnimation_toggled(bool checked);
+
+    void on_cbFromXML_currentIndexChanged(const QString &arg1);
+
+    void on_cbSpecificFilesLevels_toggled(bool checked);
+
+    void on_tbAbortConversion_clicked();
+
+    void on_tabWidget_currentChanged(int);
+
+    void on_actionSave_Project_triggered();
+
+    void on_actionSave_triggered();
+
+    void on_actionLoad_Project_triggered();
+
+    void on_actionProject1_triggered();
+
+    void on_actionProject2_triggered();
+
+    void on_actionProject3_triggered();
+
+    void on_actionProject4_triggered();
+
+    void on_actionProject5_triggered();
+
+    void on_actionBackground_Image_Wizard_triggered();
+
+    void on_actionNew_Project_triggered();
+
+    void on_tbXmlToolsInterface_clicked();
+
+    void on_actionWindow_Messages_Wizard_triggered();
+
+private:
+    Ui::MainWindow *ui;
+    Logger *myLogger;
+    QString workspaceLocation; //Workspace location
+    QString workspaceWizardsLocation; //Workspace wizard location
+    QString outputFolder; //Output folder
+    QString AeLocation; //Workspace location
+    QString lastProjectFilePath;
+    int startedWindowWidth;
+    int startedWindowHeight;
+#ifdef Q_OS_MAC
+    bool useYesAsDefaultWhenRemovingItems;
+#endif
+    QLabel *itemsLoaded;
+    QProgressBar *myBar; //Progress Bar
+    QHash<QString, QString> commandMap; //Map the commands for fast retreive
+    QStringList listToProccess; //items to proccess
+    Converter *myConverter = nullptr;
+    QSettings *vagoSettings;
+    static const QString VagoSettingsName;
+    static constexpr int recentProjectsMaxSize=5;
+    QList<QString> recentProjectsList;
+#ifdef Q_OS_WIN
+    // These are deleted automatically by the window (since button is attached to it)
+    QWinTaskbarProgress *win7TaskBarProgress;
+    QWinTaskbarButton *win7TaskBarButton;
+#endif
+    bool unsavedChangesExist = false;
+    // Indicates that the application is fully loaded which includes painting the main window
+    bool applicationIsFullyLoaded = false;
+    // This variable indicates that we have a project being loaded. It should only be set by MainWindow thread.
+    // It allow us to ignore certain gui slots like when checking checkbox that ask the user for input
+    bool projectIsLoading = false;
+
+    // anonymous enum
+    enum {XMLTabIndex, TexturesTabIndex, CharactersTabIndex, ObjectsTabIndex, LevelsTabIndex, MiscTabIndex};
+
+    void connectSlots();
+    void showErrStatusMessage(QString message);
+    void showSuccessStatusMessage(QString message);
+    void mapCommands();
+    void addRowTable(DropTableWidget *myTable, QString file, QString fromTo, QString command, bool isToDisabled=false);
+    void clearTableContents(DropTableWidget *myTable);
+    void clearTableNoPrompt(DropTableWidget *myTable);
+    void removeTableContents(DropTableWidget *myTable);
+    void updateComboBox(const QString &arg1, QComboBox *comboBox);
+    void startConversion();
+    void updateItemsLoaded(DropTableWidget *currentTable);
+    void changeToCurrentSettings(QList<int> rows, DropTableWidget* myTable); //change some rows to the current settings
+    void changeItemsOutput(DropTableWidget* myTable, QList<int> rows, QString newOutput);
+    void setConverterButtonsSize();
+    void saveProjectState(const QString &filePath);
+    void saveProjectWidget(pugi::xml_node &rootNode, DropTableWidget* table);
+    void loadProjectState(const QString &filePath);
+    void setVagoWindowTitle();
+    void loadProjectWidget(pugi::xml_document &doc, DropTableWidget* table);
+    void saveRecentProjects();
+    void loadRecentProjects();
+    void addNewRecentProject(const QString &filePath);
+    void reloadRecentProjectsMenu();
+    void showEvent(QShowEvent *e);
+    void rowsWereChangedInDropTableWidget();
+    QString getFileOutputFolder(QString fromTo, QString myOutputFolder="");
+    QString fileParsingXML(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file);
+    QString fileParsingTextures(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file);
+    QString fileParsingObjects(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file);
+    QString fileParsingCharacters(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file);
+    QString fileParsingLevels(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file);
+    QString fileParsingMisc(QString myOutputFolder, QString from, QString to , QString file);
+    QString getCommand(DropTableWidget* myTable, QString myOutputFolder, QString from, QString to , QString file);
+    QString getTypeConversion(DropTableWidget *myTable); //get the current type for a table
+    QString getOSIndependentAppPath();
+    QString getTabNameByTableWidget(DropTableWidget* table);
+    QString getCurrentTabName();
+    QRadioButton* getTextureRBCheckedTypeTexture();
+    QRadioButton *getTextureRBTypeTextureByName(const QString &texType);
+    DropTableWidget *getCurrentTableWidget();
+    DropTableWidget* getTableWidgetByTabName(const QString &tabName);
+    QList<DropTableWidget*> getAllTableWidgets();
+    QMessageBox::StandardButton askToSaveCurrentProject();
+
+signals:
+    void terminateCurrProcess();
+    void signalAppIsLoaded();
+};
+
+#endif // MAINWINDOW_H
Index: s10k/Vago/mainwindow.ui
===================================================================
--- s10k/Vago/mainwindow.ui	(revision 1092)
+++ s10k/Vago/mainwindow.ui	(revision 1092)
@@ -0,0 +1,1710 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Vago</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="resources.qrc">
+    <normaloff>:/new/icons/vago_icon.png</normaloff>:/new/icons/vago_icon.png</iconset>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_5">
+      <item>
+       <widget class="QToolButton" name="tbAbortConversion">
+        <property name="toolTip">
+         <string>Abort current conversion</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="icon">
+         <iconset resource="resources.qrc">
+          <normaloff>:/new/icons/abort.png</normaloff>:/new/icons/abort.png</iconset>
+        </property>
+        <property name="autoRaise">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QToolButton" name="tbOpenFolder">
+        <property name="toolTip">
+         <string>Open Vago workspace</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+        <property name="icon">
+         <iconset resource="resources.qrc">
+          <normaloff>:/new/icons/folder_icon.png</normaloff>:/new/icons/folder_icon.png</iconset>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="emptySpacerLabel2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>20</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="baseSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QToolButton" name="tbXmlToolsInterface">
+        <property name="toolTip">
+         <string>XmlTools Interface</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+        <property name="icon">
+         <iconset resource="resources.qrc">
+          <normaloff>:/new/icons/xmltoolsinterface.png</normaloff>:/new/icons/xmltoolsinterface.png</iconset>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="emptySpacerLabel3">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>20</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QToolButton" name="tbCommand">
+        <property name="toolTip">
+         <string>Manual Tools Commands</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+        <property name="icon">
+         <iconset resource="resources.qrc">
+          <normaloff>:/new/icons/command_icon.png</normaloff>:/new/icons/command_icon.png</iconset>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="emptySpacerLabel4">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>20</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QToolButton" name="tbOni">
+        <property name="toolTip">
+         <string>Launch Oni</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+        <property name="icon">
+         <iconset resource="resources.qrc">
+          <normaloff>:/new/icons/oni_icon.png</normaloff>:/new/icons/oni_icon.png</iconset>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="emptySpacerLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>20</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="baseSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QToolButton" name="tbAE">
+        <property name="toolTip">
+         <string>Launch AE installer</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+        <property name="icon">
+         <iconset resource="resources.qrc">
+          <normaloff>:/new/icons/AE_icon.png</normaloff>:/new/icons/AE_icon.png</iconset>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <widget class="QTabWidget" name="tabWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="tabGeneral">
+       <attribute name="title">
+        <string>XML</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_18">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_12">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_8">
+            <item>
+             <widget class="QLabel" name="label_10">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>From</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbFromXML">
+              <item>
+               <property name="text">
+                <string>ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>XML</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_9">
+            <item>
+             <widget class="QLabel" name="label_11">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>To</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbToXML">
+              <item>
+               <property name="text">
+                <string>XML</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_11">
+          <item>
+           <widget class="QGroupBox" name="gbSourcesXML">
+            <property name="title">
+             <string>Sources</string>
+            </property>
+            <layout class="QHBoxLayout" name="horizontalLayout_13">
+             <item>
+              <widget class="DropTableWidget" name="twSourcesXML"/>
+             </item>
+             <item>
+              <layout class="QVBoxLayout" name="verticalLayout_10">
+               <item>
+                <widget class="QPushButton" name="pbAddSourceXML">
+                 <property name="minimumSize">
+                  <size>
+                   <width>0</width>
+                   <height>0</height>
+                  </size>
+                 </property>
+                 <property name="text">
+                  <string>Add</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QPushButton" name="pbRemoveSourceXML">
+                 <property name="text">
+                  <string>Remove</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QPushButton" name="pbClearSourcesXML">
+                 <property name="text">
+                  <string>Clear</string>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+            </layout>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tabTextures">
+       <attribute name="title">
+        <string>Textures</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_19">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_15">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_14">
+            <item>
+             <widget class="QLabel" name="label_13">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>From</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbFromTextures">
+              <item>
+               <property name="text">
+                <string>DAT / TXMP ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>TGA / DDS / PNG / JPG</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_15">
+            <item>
+             <widget class="QLabel" name="label_14">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>To</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbToTextures">
+              <item>
+               <property name="text">
+                <string>TGA</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>DDS</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>PNG</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>JPG</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbSourcesGeneralTextures">
+          <property name="title">
+           <string>Sources</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_14">
+           <item>
+            <widget class="DropTableWidget" name="twSourcesTextures"/>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_17">
+             <item>
+              <widget class="QPushButton" name="pbAddSourceTextures">
+               <property name="minimumSize">
+                <size>
+                 <width>0</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>Add</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbRemoveSourceTextures">
+               <property name="text">
+                <string>Remove</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbClearSourcesTextures">
+               <property name="text">
+                <string>Clear</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbTextures">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="title">
+           <string>Options</string>
+          </property>
+          <layout class="QVBoxLayout" name="verticalLayout_24">
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_23">
+             <item>
+              <layout class="QHBoxLayout" name="horizontalLayout_21">
+               <item>
+                <widget class="QRadioButton" name="rbBGR32">
+                 <property name="text">
+                  <string>BGR32</string>
+                 </property>
+                 <property name="checked">
+                  <bool>true</bool>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QRadioButton" name="rbBGRA32">
+                 <property name="text">
+                  <string>BGRA32</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QRadioButton" name="rbBGR555">
+                 <property name="text">
+                  <string>BGR555</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QRadioButton" name="rbBGRA5551">
+                 <property name="text">
+                  <string>BGRA5551</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QRadioButton" name="rbBGRA444">
+                 <property name="text">
+                  <string>BGRA444</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QRadioButton" name="rbDxt1">
+                 <property name="text">
+                  <string>dxt1</string>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+             <item>
+              <layout class="QHBoxLayout" name="horizontalLayout_22">
+               <item>
+                <widget class="QCheckBox" name="cbMipMapsTextures">
+                 <property name="text">
+                  <string>GenMipMaps</string>
+                 </property>
+                 <property name="checked">
+                  <bool>true</bool>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QCheckBox" name="cbNoUwrap">
+                 <property name="text">
+                  <string>NoUwrap</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QCheckBox" name="cbNoVwrap">
+                 <property name="text">
+                  <string>NoVwrap</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QCheckBox" name="cbLarge">
+                 <property name="text">
+                  <string>Large</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QCheckBox" name="cbEnvMap">
+                 <property name="toolTip">
+                  <string>Used for reflection in armors. The armor texture has an alpha channel which is transparent and the envmap texture is shown.
+It's the name of a TXMP.oni file, don't include the extension.</string>
+                 </property>
+                 <property name="text">
+                  <string>EnvMap:</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QLineEdit" name="leEnvMapTexture">
+                 <property name="enabled">
+                  <bool>false</bool>
+                 </property>
+                 <property name="toolTip">
+                  <string>Used for reflection in armors. The armor texture has an alpha channel which is transparent and the envmap texture is shown.
+It's the name of a TXMP.oni file, don't include the extension.</string>
+                 </property>
+                 <property name="placeholderText">
+                  <string>EnvMap texture name</string>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tab">
+       <attribute name="title">
+        <string>Characters</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_4">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_49">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_63">
+            <item>
+             <widget class="QLabel" name="label_30">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>From</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbFromCharacters">
+              <item>
+               <property name="text">
+                <string>TRBS / ONCC ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>TRBS XML</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>TRBS DAE</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>TRAM ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>FILM DAT</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_64">
+            <item>
+             <widget class="QLabel" name="label_31">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>To</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbToCharacters">
+              <item>
+               <property name="text">
+                <string>DAE</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbSourcesAnimations">
+          <property name="title">
+           <string>Sources</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_48">
+           <item>
+            <widget class="DropTableWidget" name="twSourcesCharacters"/>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_62">
+             <item>
+              <widget class="QPushButton" name="pbAddSourceCharacters">
+               <property name="minimumSize">
+                <size>
+                 <width>0</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>Add</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbRemoveSourceCharacters">
+               <property name="text">
+                <string>Remove</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbClearSourcesCharacters">
+               <property name="text">
+                <string>Clear</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbModels">
+          <property name="title">
+           <string>Options</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_3">
+           <item>
+            <widget class="QCheckBox" name="cbCellShading">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="text">
+              <string>Cell Shading</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="cbNormals">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="text">
+              <string>Normals</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="cbWithTRBS_ONCC">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="toolTip">
+              <string>Extract a TRAM (animation) with character's TRBS / ONCC
+For example extract a Muro's TRAM  with Konoko's ONCC
+(input the full path for the TRBS / ONCC.oni file)</string>
+             </property>
+             <property name="text">
+              <string>Extract with TRBS / ONCC:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="DropLineEdit" name="leTRBS_ONCC">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="toolTip">
+              <string>Extract a TRAM (animation) with character's TRBS / ONCC
+For example extract a Muro's TRAM  with Konoko's ONCC
+(input the full path for the TRBS / ONCC.oni file)</string>
+             </property>
+             <property name="placeholderText">
+              <string>Full path to TRBS / ONCC.oni source file</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tabModels">
+       <attribute name="title">
+        <string>Objects</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_26">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_28">
+            <item>
+             <widget class="QLabel" name="label_17">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>From</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbFromObjects">
+              <item>
+               <property name="text">
+                <string>M3GM ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>ONWC ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>OBAN ONI (cam)</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>OBJ</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_29">
+            <item>
+             <widget class="QLabel" name="label_18">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>To</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbToObjects">
+              <item>
+               <property name="text">
+                <string>OBJ</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>DAE</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbSourcesModels">
+          <property name="title">
+           <string>Sources</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_16">
+           <item>
+            <widget class="DropTableWidget" name="twSourcesObjects"/>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_11">
+             <item>
+              <widget class="QPushButton" name="pbAddSourceObjects">
+               <property name="minimumSize">
+                <size>
+                 <width>0</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>Add</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbRemoveSourceObjects">
+               <property name="text">
+                <string>Remove</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbClearSourcesObjects">
+               <property name="text">
+                <string>Clear</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbAnimations">
+          <property name="title">
+           <string>Options</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout">
+           <item>
+            <widget class="QCheckBox" name="cbTexture">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="toolTip">
+              <string>Give model a texture.
+It's the name of a TXMP.oni file, don't include the extension.</string>
+             </property>
+             <property name="text">
+              <string>Texture:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="leTextureName">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="toolTip">
+              <string>Give model a texture. 
+It's the name of a TXMP.oni file, don't include the extension.</string>
+             </property>
+             <property name="text">
+              <string>TXMP.oni source file</string>
+             </property>
+             <property name="placeholderText">
+              <string>Texture name</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="cbWithAnimation">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="toolTip">
+              <string>Give model a texture.
+It's the name of a TXMP.oni file, don't include the extension.</string>
+             </property>
+             <property name="text">
+              <string>With Animation:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="leAnimationName">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="toolTip">
+              <string>Give model a texture. 
+It's the name of a TXMP.oni file, don't include the extension.</string>
+             </property>
+             <property name="placeholderText">
+              <string>OBAN.oni source file</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tabLevels">
+       <attribute name="title">
+        <string>Levels</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_5">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_28">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_32">
+            <item>
+             <widget class="QLabel" name="label_19">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>From</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbFromLevels">
+              <item>
+               <property name="text">
+                <string>DAT</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>ONI FILES</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>MASTER XML</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>AKEV ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>DAE</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_33">
+            <item>
+             <widget class="QLabel" name="label_20">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>To</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbToLevels">
+              <item>
+               <property name="text">
+                <string>ONI FILES</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbSourcesLevels">
+          <property name="title">
+           <string>Sources</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_17">
+           <item>
+            <widget class="DropTableWidget" name="twSourcesLevels"/>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_16">
+             <item>
+              <widget class="QPushButton" name="pbAddSourceLevels">
+               <property name="minimumSize">
+                <size>
+                 <width>0</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>Add</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbRemoveSourceLevels">
+               <property name="text">
+                <string>Remove</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbClearSourcesLevels">
+               <property name="text">
+                <string>Clear</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbLevels">
+          <property name="enabled">
+           <bool>true</bool>
+          </property>
+          <property name="title">
+           <string>Options</string>
+          </property>
+          <layout class="QVBoxLayout" name="verticalLayout_3">
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_4">
+             <item>
+              <widget class="QCheckBox" name="cbSpecificFilesLevels">
+               <property name="enabled">
+                <bool>true</bool>
+               </property>
+               <property name="minimumSize">
+                <size>
+                 <width>122</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="toolTip">
+                <string>Extract specific files oni files from the DAT file
+
+Example of input:
+AKEVEnvWarehouse
+This will extract only the file AKEVEnvWarehouse.oni from the dat.
+
+You can extract multiple files using wildcards e.g.: 
+M3GM* 
+This will extract all files which begin with M3GM. </string>
+               </property>
+               <property name="text">
+                <string>Extract specific files:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="leSpecificFilesLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="toolTip">
+                <string>Extract specific files oni files from the DAT file
+
+Example of input:
+AKEVEnvWarehouse
+This will extract only the file AKEVEnvWarehouse.oni from the dat.
+
+You can extract multiple files using wildcards e.g.: 
+M3GM* 
+This will extract all files which begin with M3GM. </string>
+               </property>
+               <property name="text">
+                <string/>
+               </property>
+               <property name="placeholderText">
+                <string>Pattern to file or files (e.g. AKEVEnvWarehouse)</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_27">
+             <item>
+              <widget class="QCheckBox" name="cbDatLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="minimumSize">
+                <size>
+                 <width>122</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>DAT Filename:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="leTargetDatLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="placeholderText">
+                <string>Custom .dat level filename</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QCheckBox" name="cbBnvLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="text">
+                <string>Bnv Source:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="leBnvLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="placeholderText">
+                <string>Bnv .dae source file</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QCheckBox" name="cbGridsLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="toolTip">
+                <string>Generate pathfinding grids (master xml generates them automatically). Needs Bnv source.</string>
+               </property>
+               <property name="text">
+                <string>Generate Grids</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <item>
+              <widget class="QCheckBox" name="cbAdditionalSourcesLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="minimumSize">
+                <size>
+                 <width>122</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>Additional Sources:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="leAdditSourcesLevels">
+               <property name="enabled">
+                <bool>false</bool>
+               </property>
+               <property name="toolTip">
+                <string>Use &quot;;&quot; as separator for each file</string>
+               </property>
+               <property name="placeholderText">
+                <string>Additional .dae sources for akev (e.g. env_markers.dae)</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tabMisc">
+       <attribute name="title">
+        <string>Misc</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_34">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_19">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_20">
+            <item>
+             <widget class="QLabel" name="label_22">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>From</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbFromMisc">
+              <item>
+               <property name="text">
+                <string>DAT / SNDD ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>DAT / SUBT ONI</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>WAV / AIF</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>TXT</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_21">
+            <item>
+             <widget class="QLabel" name="label_23">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>To</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="cbToMisc">
+              <item>
+               <property name="text">
+                <string>WAV</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>AIF</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="gbSourcesMisc">
+          <property name="title">
+           <string>Sources</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_18">
+           <item>
+            <widget class="DropTableWidget" name="twSourcesMisc"/>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_22">
+             <item>
+              <widget class="QPushButton" name="pbAddSourceMisc">
+               <property name="minimumSize">
+                <size>
+                 <width>0</width>
+                 <height>0</height>
+                </size>
+               </property>
+               <property name="text">
+                <string>Add</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbRemoveSourceMisc">
+               <property name="text">
+                <string>Remove</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pbClearSourcesMisc">
+               <property name="text">
+                <string>Clear</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+    <item>
+     <widget class="Line" name="line_3">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QPushButton" name="pbConvert">
+      <property name="minimumSize">
+       <size>
+        <width>0</width>
+        <height>30</height>
+       </size>
+      </property>
+      <property name="toolTip">
+       <string>Convert the sources above</string>
+      </property>
+      <property name="text">
+       <string>Convert</string>
+      </property>
+      <property name="shortcut">
+       <string>Ctrl+Return</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>800</width>
+     <height>20</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFile">
+    <property name="title">
+     <string>File</string>
+    </property>
+    <widget class="QMenu" name="menuRecent_Projects">
+     <property name="title">
+      <string>Recent Projects</string>
+     </property>
+     <addaction name="actionProject1"/>
+     <addaction name="actionProject2"/>
+     <addaction name="actionProject3"/>
+     <addaction name="actionProject4"/>
+     <addaction name="actionProject5"/>
+    </widget>
+    <addaction name="actionNew_Project"/>
+    <addaction name="actionSave"/>
+    <addaction name="actionSave_Project"/>
+    <addaction name="actionLoad_Project"/>
+    <addaction name="menuRecent_Projects"/>
+    <addaction name="separator"/>
+    <addaction name="actionExit"/>
+   </widget>
+   <widget class="QMenu" name="menuHelp">
+    <property name="title">
+     <string>Help</string>
+    </property>
+    <addaction name="actionCheck_OniSplit_version"/>
+    <addaction name="actionCheck_xmlTools_version"/>
+    <addaction name="actionCheck_For_Updates"/>
+    <addaction name="actionAbout"/>
+   </widget>
+   <widget class="QMenu" name="menuTarget_Platform">
+    <property name="title">
+     <string>Target Platform</string>
+    </property>
+    <addaction name="actionWindows"/>
+    <addaction name="actionMac_Windows_demo"/>
+   </widget>
+   <widget class="QMenu" name="menuOptions">
+    <property name="title">
+     <string>Options</string>
+    </property>
+    <widget class="QMenu" name="menuOutput_directly_to">
+     <property name="title">
+      <string>Output directly to:</string>
+     </property>
+     <addaction name="actionWorkspace"/>
+     <addaction name="actionOther"/>
+    </widget>
+    <addaction name="menuOutput_directly_to"/>
+    <addaction name="separator"/>
+    <addaction name="actionOpen_AE_folder"/>
+    <addaction name="actionView_log"/>
+    <addaction name="separator"/>
+    <addaction name="actionPreferences"/>
+   </widget>
+   <widget class="QMenu" name="menuTools">
+    <property name="title">
+     <string>Tools</string>
+    </property>
+    <addaction name="actionAE_Package_Creator"/>
+    <addaction name="actionSound_Wizard"/>
+    <addaction name="actionBackground_Image_Wizard"/>
+    <addaction name="actionWindow_Messages_Wizard"/>
+   </widget>
+   <addaction name="menuFile"/>
+   <addaction name="menuTarget_Platform"/>
+   <addaction name="menuOptions"/>
+   <addaction name="menuTools"/>
+   <addaction name="menuHelp"/>
+  </widget>
+  <widget class="QToolBar" name="mainToolBar">
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>false</bool>
+   </attribute>
+  </widget>
+  <widget class="QStatusBar" name="statusBar">
+   <property name="layoutDirection">
+    <enum>Qt::LeftToRight</enum>
+   </property>
+  </widget>
+  <action name="actionExit">
+   <property name="text">
+    <string>Exit</string>
+   </property>
+  </action>
+  <action name="actionAbout">
+   <property name="text">
+    <string>About</string>
+   </property>
+  </action>
+  <action name="actionCheck_For_Updates">
+   <property name="text">
+    <string>Check for Vago updates</string>
+   </property>
+  </action>
+  <action name="actionWindows">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Windows</string>
+   </property>
+  </action>
+  <action name="actionMac_Windows_demo">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Mac / Windows demo</string>
+   </property>
+  </action>
+  <action name="actionPreferences">
+   <property name="text">
+    <string>Preferences</string>
+   </property>
+  </action>
+  <action name="actionCheck_OniSplit_version">
+   <property name="text">
+    <string>Check OniSplit version</string>
+   </property>
+  </action>
+  <action name="actionClean_Workspace">
+   <property name="text">
+    <string>Clean Workspace</string>
+   </property>
+  </action>
+  <action name="actionWorkspace">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Workspace</string>
+   </property>
+   <property name="toolTip">
+    <string>Workspace</string>
+   </property>
+  </action>
+  <action name="actionOther">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Other...</string>
+   </property>
+   <property name="toolTip">
+    <string>Other</string>
+   </property>
+  </action>
+  <action name="actionView_log">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/new/icons/log.png</normaloff>:/new/icons/log.png</iconset>
+   </property>
+   <property name="text">
+    <string>View log file</string>
+   </property>
+  </action>
+  <action name="actionAE_Package_Creator">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/new/icons/package.png</normaloff>:/new/icons/package.png</iconset>
+   </property>
+   <property name="text">
+    <string>AEI Mod Package Wizard</string>
+   </property>
+  </action>
+  <action name="actionSound_Wizard">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/new/icons/sound.png</normaloff>:/new/icons/sound.png</iconset>
+   </property>
+   <property name="text">
+    <string>Sound Wizard</string>
+   </property>
+  </action>
+  <action name="actionCheck_xmlTools_version">
+   <property name="text">
+    <string>Check XmlTools version</string>
+   </property>
+  </action>
+  <action name="actionOpen_AE_folder">
+   <property name="text">
+    <string>Open AE folder</string>
+   </property>
+  </action>
+  <action name="actionSave_Project">
+   <property name="text">
+    <string>Save Project As...</string>
+   </property>
+  </action>
+  <action name="actionLoad_Project">
+   <property name="text">
+    <string>Load Project...</string>
+   </property>
+   <property name="iconText">
+    <string>Load Project...</string>
+   </property>
+   <property name="toolTip">
+    <string>Load Project...</string>
+   </property>
+  </action>
+  <action name="actionSave">
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Save Project</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+S</string>
+   </property>
+  </action>
+  <action name="actionPlaceholder1">
+   <property name="text">
+    <string>Placeholder1</string>
+   </property>
+  </action>
+  <action name="actionProject1">
+   <property name="text">
+    <string>Project1</string>
+   </property>
+  </action>
+  <action name="actionProject2">
+   <property name="text">
+    <string>Project2</string>
+   </property>
+  </action>
+  <action name="actionProject3">
+   <property name="text">
+    <string>Project3</string>
+   </property>
+  </action>
+  <action name="actionProject4">
+   <property name="text">
+    <string>Project4</string>
+   </property>
+  </action>
+  <action name="actionProject5">
+   <property name="text">
+    <string>Project5</string>
+   </property>
+  </action>
+  <action name="actionBackground_Image_Wizard">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/new/icons/background_image.png</normaloff>:/new/icons/background_image.png</iconset>
+   </property>
+   <property name="text">
+    <string>Background Image Wizard</string>
+   </property>
+  </action>
+  <action name="actionNew_Project">
+   <property name="text">
+    <string>New Project</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+N</string>
+   </property>
+  </action>
+  <action name="actionXmlTools_Interface">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/new/icons/xmltoolsinterface.png</normaloff>:/new/icons/xmltoolsinterface.png</iconset>
+   </property>
+   <property name="text">
+    <string>XmlTools Interface</string>
+   </property>
+  </action>
+  <action name="actionWindow_Messages_Wizard">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/new/icons/windowmessages.png</normaloff>:/new/icons/windowmessages.png</iconset>
+   </property>
+   <property name="text">
+    <string>Window Messages Wizard</string>
+   </property>
+  </action>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+  <customwidget>
+   <class>DropTableWidget</class>
+   <extends>QTableWidget</extends>
+   <header location="global">droptablewidget.h</header>
+  </customwidget>
+  <customwidget>
+   <class>DropLineEdit</class>
+   <extends>QLineEdit</extends>
+   <header location="global">droplineedit.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/manualcommands.cpp
===================================================================
--- s10k/Vago/manualcommands.cpp	(revision 1092)
+++ s10k/Vago/manualcommands.cpp	(revision 1092)
@@ -0,0 +1,171 @@
+#include "manualcommands.h"
+#include "ui_manualcommands.h"
+
+ManualCommands::ManualCommands(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::ManualCommands)
+{
+    ui->setupUi(this);
+    this->setAttribute(Qt::WA_DeleteOnClose, true); //destroy itself once finished.
+    this->myProcess = new QProcess();
+    this->myProcess->setProcessChannelMode(QProcess::MergedChannels);
+    this->myProcess->setWorkingDirectory(UtilVago::getAppPath());
+    ui->leManualCommand->installEventFilter(this);
+
+    this->nextInsertHistoryIdx=0;
+    this->searchHistoryIdx=0;
+    for(int i=0; i<this->limHistory; i++){
+        this->history[i]=""; //clean array
+    }
+}
+
+ManualCommands::~ManualCommands()
+{
+    delete myProcess;
+    delete ui;
+}
+
+void ManualCommands::on_pbInput_clicked()
+{
+    executeCommand();
+}
+
+void ManualCommands::executeCommand(){
+
+    QString toolExecutable;
+
+    if(ui->cbTargetTool->currentText() == "OniSplit"){
+        toolExecutable = UtilVago::getOniSplitExecutable();
+    }
+    else{
+        toolExecutable = UtilVago::getXmlToolsExecutable();
+    }
+
+    QString command=ui->leManualCommand->text().trimmed();
+
+    if(command.isEmpty()){
+        Util::showErrorPopUp("Please input a command first.");
+        return;
+    }
+
+    //Only add to the history if the last command is different
+    bool different=false;
+    if(this->nextInsertHistoryIdx==0){ //at the limit
+        if(this->history[this->limHistory-1]!=command){
+            different=true;
+        }
+    }
+    else{
+        if(this->history[this->nextInsertHistoryIdx-1]!=command){
+            different=true;
+        }
+    }
+
+    if(different){
+        this->history[this->nextInsertHistoryIdx++]=command; //assign and increment
+
+        if(this->nextInsertHistoryIdx==this->limHistory){ //if we are at the limit begin override
+            this->nextInsertHistoryIdx=0;
+        }
+    }
+
+    this->myProcess->start(toolExecutable+" "+ui->leManualCommand->text());
+    this->myProcess->waitForFinished(120000); //wait 2 minutes at maximum
+    ui->ptOutput->appendPlainText("> " + ui->cbTargetTool->currentText() + " " + command);
+    ui->ptOutput->appendPlainText(this->myProcess->readAll());
+    ui->ptOutput->ensureCursorVisible();
+    ui->ptOutput->verticalScrollBar()->setValue( ui->ptOutput->verticalScrollBar()->maximum() );
+    ui->leManualCommand->clear();
+}
+
+void ManualCommands::on_pcCopyClipboard_clicked()
+{
+    QApplication::clipboard()->setText(ui->ptOutput->toPlainText());
+}
+
+void ManualCommands::on_pbClear_clicked()
+{
+    if(Util::showQuestionPopUp(this,"Clear the output?")){
+        ui->ptOutput->clear();
+    }
+}
+
+//Allows detecting arrows press for history without subclassing lineedit.
+bool ManualCommands::eventFilter(QObject* obj, QEvent *event)
+{
+    if (obj == ui->leManualCommand)
+    {
+        if (event->type() == QEvent::KeyPress)
+        {
+            QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
+            if (keyEvent->key() == Qt::Key_Up) //UP ARROW
+            {
+
+                int oldValue=this->searchHistoryIdx;
+
+                //if it isn't the first member of history continue decrementing
+                if(this->searchHistoryIdx!=this->nextInsertHistoryIdx){ //for when it didn't the round
+                    this->searchHistoryIdx--;
+                }
+
+                //start with the last elemented inputted
+                if(ui->leManualCommand->text().trimmed().isEmpty()){
+                    this->searchHistoryIdx=this->nextInsertHistoryIdx-1;
+                }
+
+                //rotate
+                if(this->searchHistoryIdx < 0){
+                    this->searchHistoryIdx=this->limHistory-1; //start from behind (49)
+                }
+                else if(this->searchHistoryIdx == this->limHistory){
+                    this->searchHistoryIdx=0; //start from 0 again
+                }
+
+                //not filled yet value? Stop.
+                if(this->history[this->searchHistoryIdx].isEmpty()){
+                    this->searchHistoryIdx=oldValue;
+                    return true;
+                }
+
+                ui->leManualCommand->setText(this->history[this->searchHistoryIdx]);
+
+                return true;
+
+            }
+            else if(keyEvent->key() == Qt::Key_Down) //DOWN ARROW
+            {
+                if(ui->leManualCommand->text().trimmed().isEmpty()){
+                    return true;
+                }
+
+                int oldValue=this->searchHistoryIdx;
+
+                //Continue incrementing if it isnt the last member of history
+                if(this->searchHistoryIdx!=this->nextInsertHistoryIdx-1 && //for when it didn't the round
+                        !(this->nextInsertHistoryIdx==0 && this->searchHistoryIdx==this->limHistory-1)){ //for when it did the round
+                    this->searchHistoryIdx++;
+                }
+
+                //rotate
+                if(this->searchHistoryIdx < 0){
+                    this->searchHistoryIdx=this->limHistory-1; //start from behind (49)
+                }
+                else if(this->searchHistoryIdx == this->limHistory){
+                    this->searchHistoryIdx=0; //start from 0 again
+                }
+
+                //not filled yet value? Stop.
+                if(this->history[this->searchHistoryIdx].isEmpty()){
+                    this->searchHistoryIdx=oldValue;
+                    return true;
+                }
+
+                ui->leManualCommand->setText(this->history[this->searchHistoryIdx]);
+
+                return true;
+            }
+        }
+        return false;
+    }
+    return QMainWindow::eventFilter(obj, event);
+}
Index: s10k/Vago/manualcommands.h
===================================================================
--- s10k/Vago/manualcommands.h	(revision 1092)
+++ s10k/Vago/manualcommands.h	(revision 1092)
@@ -0,0 +1,44 @@
+#ifndef MANUALCOMMANDS_H
+#define MANUALCOMMANDS_H
+
+#include <QMainWindow>
+#include <QClipboard>
+#include <QProcess>
+#include <QScrollBar>
+
+#include "utilvago.h"
+
+
+namespace Ui {
+class ManualCommands;
+}
+
+class ManualCommands : public QMainWindow
+{
+    Q_OBJECT
+    
+public:
+    explicit ManualCommands(QWidget *parent = 0);
+    ~ManualCommands();
+
+protected:
+    bool eventFilter(QObject* obj, QEvent *event);
+    
+private slots:
+    void on_pbInput_clicked();
+
+    void on_pcCopyClipboard_clicked();
+
+    void on_pbClear_clicked();
+
+private:
+    void executeCommand();
+    Ui::ManualCommands *ui;
+    static const int limHistory=50;
+    QString history[limHistory]; //this is kinda a circular buffer manual implementation (http://www.boost.org/doc/libs/1_36_0/libs/circular_buffer/doc/circular_buffer.html)
+    int nextInsertHistoryIdx; //next index where new commands will be inserted
+    int searchHistoryIdx; //current index when searching history with arrows
+    QProcess *myProcess;
+};
+
+#endif // MANUALCOMMANDS_H
Index: s10k/Vago/manualcommands.ui
===================================================================
--- s10k/Vago/manualcommands.ui	(revision 1092)
+++ s10k/Vago/manualcommands.ui	(revision 1092)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ManualCommands</class>
+ <widget class="QMainWindow" name="ManualCommands">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Manual Tools Commands</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="resources.qrc">
+    <normaloff>:/new/icons/command_icon.png</normaloff>:/new/icons/command_icon.png</iconset>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <widget class="QGroupBox" name="groupBox">
+      <property name="title">
+       <string>Input</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>Target Tool:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="cbTargetTool">
+         <item>
+          <property name="text">
+           <string>OniSplit</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>XmlTools</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <item>
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>Command:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="leManualCommand">
+           <property name="placeholderText">
+            <string>Input the command directly (up arrow for last inputted)</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pbInput">
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>Input</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="groupBox_2">
+      <property name="title">
+       <string>Output</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <item>
+        <widget class="QPlainTextEdit" name="ptOutput">
+         <property name="readOnly">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_4">
+      <item>
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="pcCopyClipboard">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>Copy to clipboard</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="pbClear">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>Clear</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources>
+  <include location="resources.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>leManualCommand</sender>
+   <signal>returnPressed()</signal>
+   <receiver>pbInput</receiver>
+   <slot>click()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>95</x>
+     <y>42</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>404</x>
+     <y>50</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
Index: s10k/Vago/packageWizard/packagepage2.cpp
===================================================================
--- s10k/Vago/packageWizard/packagepage2.cpp	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage2.cpp	(revision 1092)
@@ -0,0 +1,191 @@
+#include "packagepage2.h"
+#include "ui_packagepage2.h"
+
+const QString PackagePage2::ZipCacheFile = "jsoncache.zip";
+const QString PackagePage2::PackagesCacheUrl = "http://mods.oni2.net/jsoncache/"+ZipCacheFile;
+const QString PackagePage2::CacheFile = "nodes.json";
+
+PackagePage2::PackagePage2(Logger *myLogger, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::PackagePage2)
+{
+    ui->setupUi(this);
+    this->myLogger=myLogger;
+    this->setTitle("Mandatory Fields");
+
+    //Register fields to be accessible in another pages //Not using mandatory field, it would require empty verification too...
+    registerField("leModName", ui->leModName);
+    registerField("leAuthors", ui->leAuthors);
+    registerField("leVersion", ui->leVersion);
+    registerField("ptDescription", ui->ptDescription,"plainText");
+    registerField("lePackageNumber", ui->lePackageNumber);
+    registerField("rbReplace", ui->rbReplace);
+
+    ui->lbFieldsReadOnly->setText("<html><span style='color:#0000ff;'>* Fields read only  by AEI2 when the package "
+            "isn't at the mod depot.</span></html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+    QString htmlAsterisk="<html><span style='color:#0000ff;'>*</span></html>";
+    ui->lbAsteriscAuthors->setText(htmlAsterisk);
+    ui->lbAsteriscModName->setText(htmlAsterisk);
+    ui->lbAsteriscVersion->setText(htmlAsterisk);
+    ui->lbAsteriscDescription->setText(htmlAsterisk);
+}
+
+bool PackagePage2::validatePage(){
+    QString modName=ui->leModName->text();
+    QString authors=ui->leAuthors->text();
+    QString version=ui->leVersion->text();
+    QString description=ui->ptDescription->toPlainText();
+    QString number=ui->lePackageNumber->text();
+
+    bool emptyContent=Util::checkEmptySpaces(QStringList()<<modName<<authors<<version<<description<<number);
+
+
+    if(emptyContent){
+        Util::showErrorPopUp("You need to fill all fields first!");
+        return false;
+    }
+
+    if(number.size()!=5){
+        Util::showErrorPopUp("Invalid number format. It should contain 5 numbers.");
+        return false;
+    }
+
+    if(!Util::isStringInteger(number)){
+        Util::showErrorPopUp("Number is not numeric.");
+        return false;
+    }
+
+    return true;
+}
+
+PackagePage2::~PackagePage2()
+{
+    delete ui;
+}
+
+void PackagePage2::on_pbCheck_clicked()
+{
+    QString number = ui->lePackageNumber->text();
+
+    if(Util::checkEmptySpaces(QStringList(number))){
+        Util::showErrorPopUp("Number is empty. Please fill it first.");
+        return;
+    }
+
+    if(number.size()!=5){
+        Util::showErrorPopUp("Invalid number format. It should contain 5 numeric characters.");
+        return;
+    }
+
+    if(Util::isStringInteger(number)){
+
+        bool necessaryToRedownload=false;
+
+        QFile file(GlobalVars::VagoTemporaryDir+"/"+this->ZipCacheFile);
+
+        if(!file.exists()){
+            necessaryToRedownload=true; //File doesn't exist yet, necessary to download
+        }
+        else if (QDateTime::currentDateTime().toTime_t()-QFileInfo(file).lastModified().toTime_t() > 150){ //checks between 2 minutes (give more 30 seconds due to zip extraction)
+            necessaryToRedownload=true; //File already exists but already expired (+2 mins without update)
+        }
+
+        if(necessaryToRedownload){
+            //let's start the search in the web, so we make sure it doesn't exists yet
+            QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+            connect(manager, SIGNAL(finished(QNetworkReply*)),
+                    this, SLOT(downloadPackagesCache(QNetworkReply*)));
+
+            //This timestamp is to guarantee that the cache received is fresh even through proxys
+            QDateTime currTime = QDateTime::currentDateTime();
+            QString t_time =  QString::number(currTime.toTime_t());
+
+            manager->get(QNetworkRequest(QUrl(this->PackagesCacheUrl+"?ts="+t_time)));
+        }
+        else{ //Not needed to download! :) Let's use our local cache.
+            checkForPackagesInCache();
+        }
+    }
+    else{
+        Util::showErrorPopUp("Number is not numeric.");
+    }
+}
+
+void PackagePage2::downloadPackagesCache(QNetworkReply *result){
+
+    if(result->error()==QNetworkReply::NoError){
+
+        QFile file(GlobalVars::VagoTemporaryDir+"/"+this->ZipCacheFile);
+
+        // Create temp folder if it doesn't exist
+        if(!QDir(GlobalVars::VagoTemporaryDir).exists()){
+            QDir().mkdir(GlobalVars::VagoTemporaryDir);
+        }
+
+        if(!file.open(QIODevice::WriteOnly)){
+            UtilVago::showAndLogErrorPopUp(this->myLogger, "Error fetching package data: creating cache file.");
+            return;
+        }
+        file.write(result->readAll());
+        file.close();
+
+        //Let's extract the cache data
+        if(JlCompress::extractFile(GlobalVars::VagoTemporaryDir+"/"+this->ZipCacheFile, "/"+this->CacheFile ,GlobalVars::VagoTemporaryDir+"/"+this->CacheFile).isEmpty()){
+            UtilVago::showAndLogErrorPopUp(this->myLogger, "An error occurred while unzipping the package data.");
+        }
+
+        checkForPackagesInCache();
+
+    }
+    else{
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "An error occurred checking number availability:\n\n"+result->errorString());
+    }
+
+    result->deleteLater();
+}
+
+void PackagePage2::checkForPackagesInCache(){
+    QString packageNumber=ui->lePackageNumber->text();
+
+    QFile file(GlobalVars::VagoTemporaryDir+"/"+this->CacheFile); //let's read the chache unzipped
+    if(!file.open(QIODevice::ReadOnly)){
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "Error reading downloaded package cache data.");
+        return;
+    }
+    //Read file cache to ram
+    QString data=file.readAll();
+
+
+    //Let's play with json engine
+    QScriptEngine engine;
+    QScriptValue sc = engine.evaluate("(" + data + ")");
+
+    QScriptValue currNumber;
+    QString existingModName,existingModUrl;
+
+    QScriptValueIterator it(sc);
+
+    while (it.hasNext()) {
+        it.next();
+        currNumber=it.value().toObject().property("field_package_number").toObject().property("und").toObject().property("0").toObject().property("value");
+        if(currNumber.isValid() && currNumber.toString() == packageNumber){
+            existingModName = it.value().toObject().property("title").toString();
+            existingModUrl = it.value().toObject().property("path").toString();
+            break;
+        }
+    }
+
+    if(!existingModName.isEmpty()){
+        Util::showRichErrorPopUp("Package "+packageNumber+" is already being used by the following mod:<br/><br/>"+
+                                 existingModName+"<br/><br/>"+
+                                 "More information <a href='"+existingModUrl+"'>here</a>.");
+    }
+    else{
+        Util::showPopUp("It seems that the package number " + packageNumber + " is not being used yet! :)");
+    }
+}
+
+void PackagePage2::on_cbType_currentIndexChanged(int index)
+{
+    ui->lePackageNumber->setText(QString().setNum(index+1)+"XXXX");
+}
Index: s10k/Vago/packageWizard/packagepage2.h
===================================================================
--- s10k/Vago/packageWizard/packagepage2.h	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage2.h	(revision 1092)
@@ -0,0 +1,43 @@
+#ifndef PACKAGEPAGE2_H
+#define PACKAGEPAGE2_H
+
+#include "utilvago.h"
+
+#include <QWizardPage>
+#include <QtNetwork/QNetworkAccessManager>
+#include <QtNetwork/QNetworkRequest>
+#include <QtNetwork/QNetworkReply>
+#include <QScriptEngine>
+#include <QScriptValueIterator>
+#include <JlCompress.h>
+
+namespace Ui {
+class PackagePage2;
+}
+
+class PackagePage2 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit PackagePage2(Logger *myLogger, QWidget *parent = 0);
+
+    ~PackagePage2();
+    
+private slots:
+    void on_pbCheck_clicked();
+    void downloadPackagesCache(QNetworkReply *result);
+
+    void on_cbType_currentIndexChanged(int index);
+    bool validatePage();
+
+private:
+    Ui::PackagePage2 *ui;
+    Logger *myLogger;
+    static const QString ZipCacheFile;
+    static const QString CacheFile;
+    static const QString PackagesCacheUrl;
+    void checkForPackagesInCache();
+};
+
+#endif // PACKAGEPAGE2_H
Index: s10k/Vago/packageWizard/packagepage2.ui
===================================================================
--- s10k/Vago/packageWizard/packagepage2.ui	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage2.ui	(revision 1092)
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PackagePage2</class>
+ <widget class="QWizardPage" name="PackagePage2">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>451</width>
+    <height>398</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QFormLayout" name="formLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Mod Name:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLineEdit" name="leModName"/>
+     </item>
+     <item>
+      <widget class="QLabel" name="lbAsteriscModName">
+       <property name="text">
+        <string>&lt;html&gt;&lt;span style=&quot;color:#0000ff;&quot;&gt;*&lt;/span&gt;&lt;/html&gt;</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Author(s):</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLineEdit" name="leAuthors"/>
+     </item>
+     <item>
+      <widget class="QLabel" name="lbAsteriscAuthors">
+       <property name="text">
+        <string>&lt;html&gt;&lt;span style=&quot;color:#0000ff;&quot;&gt;*&lt;/span&gt;&lt;/html&gt;</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Version:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <widget class="QLineEdit" name="leVersion"/>
+     </item>
+     <item>
+      <widget class="QLabel" name="lbAsteriscVersion">
+       <property name="text">
+        <string>&lt;html&gt;&lt;span style=&quot;color:#0000ff;&quot;&gt;*&lt;/span&gt;&lt;/html&gt;</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>Description:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_4">
+     <item>
+      <widget class="QPlainTextEdit" name="ptDescription">
+       <property name="maximumSize">
+        <size>
+         <width>16777215</width>
+         <height>100</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="lbAsteriscDescription">
+       <property name="text">
+        <string>&lt;html&gt;&lt;span style=&quot;color:#0000ff;&quot;&gt;*&lt;/span&gt;&lt;/html&gt;</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="4" column="0">
+    <widget class="QLabel" name="label_5">
+     <property name="text">
+      <string>Type:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1">
+    <widget class="QComboBox" name="cbType">
+     <item>
+      <property name="text">
+       <string>Weapons</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Characters</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Particles</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Animations (non-combat)</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Animations (combat)</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Sounds</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>User Interface</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>New Levels</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Scenarios</string>
+      </property>
+     </item>
+    </widget>
+   </item>
+   <item row="5" column="0">
+    <widget class="QLabel" name="label_6">
+     <property name="text">
+      <string>Package Number:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <item>
+      <widget class="QLineEdit" name="lePackageNumber">
+       <property name="text">
+        <string>1XXXX</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pbCheck">
+       <property name="toolTip">
+        <string>Check if the current number is available using a online database</string>
+       </property>
+       <property name="text">
+        <string>Check</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="6" column="0">
+    <widget class="QLabel" name="label_7">
+     <property name="text">
+      <string>Scripts:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_6">
+     <item>
+      <widget class="QRadioButton" name="rbReplace">
+       <property name="toolTip">
+        <string>The Installer considers your mod a scenario and takes steps to exclude other BSL scenario mods from being installed for the same level</string>
+       </property>
+       <property name="text">
+        <string>Replace</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="rbAdd">
+       <property name="toolTip">
+        <string>The Installer allows your mod to be installed to any level without restriction (allows multiple BSLs from different mods to co-exist in the same level)</string>
+       </property>
+       <property name="text">
+        <string>Add</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="7" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="8" column="0" colspan="2">
+    <widget class="QLabel" name="lbFieldsReadOnly">
+     <property name="text">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; color:#0000ff;&quot;&gt;* Edit this text in packagepage2.cpp&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/packageWizard/packagepage3.cpp
===================================================================
--- s10k/Vago/packageWizard/packagepage3.cpp	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage3.cpp	(revision 1092)
@@ -0,0 +1,64 @@
+#include "packagepage3.h"
+#include "ui_packagepage3.h"
+
+PackagePage3::PackagePage3(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::PackagePage3)
+{
+    ui->setupUi(this);
+    this->setTitle("Optional Fields");
+    this->setSubTitle("Separate multiple elements by commas.");
+
+    //Register fields
+    registerField("leDependentPackages", ui->leDependent);
+    registerField("leIncompatiblePackages", ui->leIncompatible);
+    registerField("leUnlockLevels", ui->leUnlockLevels);
+}
+
+bool PackagePage3::validatePage(){
+    QString dependentPackages=ui->leDependent->text().trimmed();
+    QString incompatiblePackages=ui->leIncompatible->text().trimmed();
+    QString unlockLevels=ui->leUnlockLevels->text().trimmed();
+
+    if(!validateField(dependentPackages) || !validateField(incompatiblePackages)
+            || !validateField(unlockLevels,true)){
+        return false;
+    }
+
+    return true;
+}
+
+bool PackagePage3::validateField(QString &field, bool isLevels){
+    //Check if the numbers are correct and correctly separated
+    if(!field.isEmpty()){
+
+        QStringList list =Util::substring(field,",");
+
+        for(int i=0; i<list.size(); i++){
+
+            if(list.at(i).isEmpty()){
+                Util::showErrorPopUp("There are commas without numbers in their sides.");
+                return false;
+            }
+
+            if(!Util::isStringInteger(list.at(i))){
+                Util::showErrorPopUp("Number is not numeric.");
+                return false;
+            }
+
+            if(!isLevels){
+                if(list.at(i).size()!=5){
+                    Util::showErrorPopUp("You have invalid packages numbers. Each number must have 5 digits.");
+                    return false;
+                }
+            }
+        }
+    }
+
+    return true;
+}
+
+PackagePage3::~PackagePage3()
+{
+    delete ui;
+}
Index: s10k/Vago/packageWizard/packagepage3.h
===================================================================
--- s10k/Vago/packageWizard/packagepage3.h	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage3.h	(revision 1092)
@@ -0,0 +1,26 @@
+#ifndef PACKAGEPAGE3_H
+#define PACKAGEPAGE3_H
+
+#include <QWizardPage>
+
+#include "util.h"
+
+namespace Ui {
+class PackagePage3;
+}
+
+class PackagePage3 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit PackagePage3(QWidget *parent = 0);
+    ~PackagePage3();
+    
+private:
+    Ui::PackagePage3 *ui;
+    bool validateField(QString &field, bool isLevels=false);
+    bool validatePage();
+};
+
+#endif // PACKAGEPAGE3_H
Index: s10k/Vago/packageWizard/packagepage3.ui
===================================================================
--- s10k/Vago/packageWizard/packagepage3.ui	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage3.ui	(revision 1092)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PackagePage3</class>
+ <widget class="QWizardPage" name="PackagePage3">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>364</width>
+    <height>113</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QFormLayout" name="formLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="toolTip">
+      <string>Fill with the packages number which this package will depend</string>
+     </property>
+     <property name="text">
+      <string>Dependent Packages:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="leDependent">
+     <property name="toolTip">
+      <string>Fill with the packages number which this package will depend</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="toolTip">
+      <string>Fill with the packages number that will conflict with this package</string>
+     </property>
+     <property name="text">
+      <string>Incompatible Packages:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="leIncompatible">
+     <property name="toolTip">
+      <string>Fill with the packages number that will conflict with this package</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="toolTip">
+      <string>If this package use new levels, specify its number to get them unlocked automatically</string>
+     </property>
+     <property name="text">
+      <string>Unlock Levels:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="leUnlockLevels">
+     <property name="toolTip">
+      <string>If this package use new levels, specify its number to get them unlocked automatically</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/packageWizard/packagepage4.cpp
===================================================================
--- s10k/Vago/packageWizard/packagepage4.cpp	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage4.cpp	(revision 1092)
@@ -0,0 +1,173 @@
+#include "packagepage4.h"
+#include "ui_packagepage4.h"
+
+PackagePage4::PackagePage4(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::PackagePage4)
+{
+    ui->setupUi(this);
+    this->setTitle("Package Files");
+    this->setSubTitle("Add the resources to the corresponding platform for your package.");
+
+    commonTable=ui->twCommon;
+    windowsTable=ui->twWindows;
+    macTable=ui->twMac;
+
+    //Setup package resources tables
+    QStringList headers = QStringList()<<"Folder"<<"Type"<<"Full Path";
+    ui->twCommon->setHorizontalHeaderLabels(headers);
+    ui->twCommon->setColumnWidth(1,75); //set size for type
+    ui->twWindows->setHorizontalHeaderLabels(headers);
+    ui->twWindows->setColumnWidth(1,75);
+    ui->twMac->setHorizontalHeaderLabels(headers);
+    ui->twMac->setColumnWidth(1,75);
+    //
+
+    //Set +- tooltips
+    on_pbSwitchFiles_clicked();
+
+    ui->tbCommonMinus->setToolTip("Remove the selected common OS folders");
+    ui->tbWindowsMinus->setToolTip("Remove the selected Windows OS folders");
+    ui->tbMacMinus->setToolTip("Remove the selected Mac OS folders");
+
+    ui->lbCommon->setText("<html><b>Common</b></html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+    ui->lbWindowsOnly->setText("<html><b>Windows Only</b></html>");
+    ui->lbMacOnly->setText("<html><b>Mac OS Only</b></html>");
+
+
+
+    connectSlots();
+}
+
+PackagePage4::~PackagePage4()
+{
+    delete ui;
+}
+
+void PackagePage4::on_pbSwitchFiles_clicked()
+{
+    if(ui->pbSwitchFiles->text()==".oni files"){
+        ui->pbSwitchFiles->setText(".bsl files");
+        ui->pbSwitchFiles->setToolTip("Click to add folders with .oni-patch files instead");
+    }
+    else if(ui->pbSwitchFiles->text()==".bsl files"){
+        ui->pbSwitchFiles->setText(".oni-patch files");
+        ui->pbSwitchFiles->setToolTip("Click to add folders with .oni files instead");
+    }
+    else{
+        ui->pbSwitchFiles->setText(".oni files");
+        ui->pbSwitchFiles->setToolTip("Click to add folders with .bsl files files instead");
+    }
+
+    ui->tbCommonPlus->setToolTip("Add common OS folders with "+ui->pbSwitchFiles->text());
+    ui->tbWindowsPlus->setToolTip("Add Windows OS folders with "+ui->pbSwitchFiles->text());
+    ui->tbMacPlus->setToolTip("Add Mac OS folders with "+ui->pbSwitchFiles->text());
+}
+
+
+void PackagePage4::addResourcesPackage(DropTableWidget *myTable, QStringList resources){
+
+    //Pre-processing (check if received only folders)
+    foreach(QString myFile, resources){
+        if(!QDir(myFile).exists()){
+            Util::showErrorPopUp("Only folders are allowed for this operation.");
+            return;
+        }
+    }
+
+    QString type=ui->pbSwitchFiles->text().replace(" files","");
+
+    foreach(QString currentFolder, resources){
+
+        currentFolder=Util::normalizePath(currentFolder); //normalize path
+
+        //Get actual number rows
+        int twSize=myTable->rowCount();
+
+        //increase the rows for the new item
+        myTable->setRowCount(twSize+1);
+
+        //Add to table and list to
+        QTableWidgetItem *newFolder = new QTableWidgetItem(Util::cutName(currentFolder));
+        QTableWidgetItem *newType = new QTableWidgetItem(type);
+        QTableWidgetItem *newFullPath = new QTableWidgetItem(currentFolder);
+
+        myTable->setItem(twSize,0,newFolder);
+        myTable->setItem(twSize,1,newType);
+        myTable->setItem(twSize,2,newFullPath);
+        myTable->updateTableToolTips(twSize); //Update tool tips
+    }
+}
+
+void PackagePage4::connectSlots(){
+    //Drop signal for Packages table
+    connect(ui->twCommon, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addResourcesPackage(DropTableWidget*,QStringList)));
+    connect(ui->twWindows, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addResourcesPackage(DropTableWidget*,QStringList)));
+    connect(ui->twMac, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addResourcesPackage(DropTableWidget*,QStringList)));
+}
+
+void PackagePage4::on_tbCommonPlus_clicked()
+{
+   addTableContents(ui->twCommon);
+}
+
+void PackagePage4::on_tbCommonMinus_clicked()
+{
+    removeTableContents(ui->twCommon);
+}
+
+void PackagePage4::on_tbWindowsPlus_clicked()
+{
+     addTableContents(ui->twWindows);
+}
+
+void PackagePage4::on_tbWindowsMinus_clicked()
+{
+    removeTableContents(ui->twWindows);
+}
+
+void PackagePage4::on_tbMacPlus_clicked()
+{
+    addTableContents(ui->twMac);
+}
+
+void PackagePage4::on_tbMacMinus_clicked()
+{
+    removeTableContents(ui->twMac);
+}
+
+void PackagePage4::addTableContents(DropTableWidget *myTable){
+    if(ui->pbSwitchFiles->text()==".oni files"){
+        addResourcesPackage(myTable,Util::multipleDirDialog("Choose folders with .oni files..."));
+    }
+    else if(ui->pbSwitchFiles->text()==".bsl files"){
+        addResourcesPackage(myTable,Util::multipleDirDialog("Choose folders with .bsl files..."));
+    }
+    else{
+        addResourcesPackage(myTable,Util::multipleDirDialog("Choose folders with .oni-patch files..."));
+    }
+}
+
+void PackagePage4::removeTableContents(DropTableWidget *myTable){
+    int size = myTable->selectionModel()->selectedRows().size();
+
+    if(size==0){
+        Util::showPopUp("Select a row first.");
+        return;
+    }
+
+    if(Util::showQuestionPopUp(this,"Are you sure you want to delete the selected rows?")){
+        for(int i=0; i<size; i++){
+            myTable->removeRow(myTable->selectionModel()->selectedRows().at(size-i-1).row());
+        }
+    }
+}
+
+bool PackagePage4::validatePage(){
+    if(ui->twCommon->rowCount()==0 && ui->twWindows->rowCount()==0 && ui->twMac->rowCount()==0){
+        Util::showErrorPopUp("You need to add some folders with resources first!");
+        return false;
+    }
+
+    return true;
+}
Index: s10k/Vago/packageWizard/packagepage4.h
===================================================================
--- s10k/Vago/packageWizard/packagepage4.h	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage4.h	(revision 1092)
@@ -0,0 +1,46 @@
+#ifndef PACKAGEPAGE4_H
+#define PACKAGEPAGE4_H
+
+#include <QWizardPage>
+#include <droptablewidget.h>
+
+namespace Ui {
+class PackagePage4;
+}
+
+class PackagePage4 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    const DropTableWidget *commonTable;
+    const DropTableWidget *windowsTable;
+    const DropTableWidget *macTable;
+    explicit PackagePage4(QWidget *parent = 0);
+    ~PackagePage4();
+
+private slots:
+    void on_pbSwitchFiles_clicked();
+    void addResourcesPackage(DropTableWidget *myTable, QStringList resources); //for packages drop
+
+    void on_tbCommonPlus_clicked();
+
+    void on_tbCommonMinus_clicked();
+
+    void on_tbWindowsPlus_clicked();
+
+    void on_tbWindowsMinus_clicked();
+
+    void on_tbMacPlus_clicked();
+
+    void on_tbMacMinus_clicked();
+
+private:
+    Ui::PackagePage4 *ui;
+    void connectSlots();
+    void addTableContents(DropTableWidget *myTable);
+    void removeTableContents(DropTableWidget *myTable);
+    bool validatePage();
+};
+
+#endif // PACKAGEPAGE4_H
Index: s10k/Vago/packageWizard/packagepage4.ui
===================================================================
--- s10k/Vago/packageWizard/packagepage4.ui	(revision 1092)
+++ s10k/Vago/packageWizard/packagepage4.ui	(revision 1092)
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PackagePage4</class>
+ <widget class="QWizardPage" name="PackagePage4">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>413</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_7">
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_5">
+       <item>
+        <widget class="QLabel" name="lbCommon">
+         <property name="minimumSize">
+          <size>
+           <width>250</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Common [edit this text in packagepage4.cpp]&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pbSwitchFiles">
+         <property name="toolTip">
+          <string>Click to add folders with .bsl files instead</string>
+         </property>
+         <property name="text">
+          <string>patch files</string>
+         </property>
+         <property name="icon">
+          <iconset resource="../resources.qrc">
+           <normaloff>:/new/icons/switch.png</normaloff>:/new/icons/switch.png</iconset>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="DropTableWidget" name="twCommon"/>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
+          <widget class="QToolButton" name="tbCommonPlus">
+           <property name="text">
+            <string>...</string>
+           </property>
+           <property name="icon">
+            <iconset resource="../resources.qrc">
+             <normaloff>:/new/icons/plus.png</normaloff>:/new/icons/plus.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="tbCommonMinus">
+           <property name="text">
+            <string>...</string>
+           </property>
+           <property name="icon">
+            <iconset resource="../resources.qrc">
+             <normaloff>:/new/icons/minus.png</normaloff>:/new/icons/minus.png</iconset>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_4">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_3">
+       <item>
+        <widget class="QLabel" name="lbWindowsOnly">
+         <property name="text">
+          <string>&lt;html&gt;&lt;b&gt;Windows Only&lt;/b&gt;&lt;/html&gt;</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="DropTableWidget" name="twWindows"/>
+         </item>
+         <item>
+          <layout class="QVBoxLayout" name="verticalLayout_4">
+           <item>
+            <widget class="QToolButton" name="tbWindowsPlus">
+             <property name="text">
+              <string>...</string>
+             </property>
+             <property name="icon">
+              <iconset resource="../resources.qrc">
+               <normaloff>:/new/icons/plus.png</normaloff>:/new/icons/plus.png</iconset>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QToolButton" name="tbWindowsMinus">
+             <property name="text">
+              <string>...</string>
+             </property>
+             <property name="icon">
+              <iconset resource="../resources.qrc">
+               <normaloff>:/new/icons/minus.png</normaloff>:/new/icons/minus.png</iconset>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_5">
+       <item>
+        <widget class="QLabel" name="lbMacOnly">
+         <property name="text">
+          <string>&lt;html&gt;&lt;b&gt;Mac OS Only&lt;/b&gt;&lt;/html&gt;
+</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="DropTableWidget" name="twMac"/>
+         </item>
+         <item>
+          <layout class="QVBoxLayout" name="verticalLayout_6">
+           <item>
+            <widget class="QToolButton" name="tbMacPlus">
+             <property name="text">
+              <string>...</string>
+             </property>
+             <property name="icon">
+              <iconset resource="../resources.qrc">
+               <normaloff>:/new/icons/plus.png</normaloff>:/new/icons/plus.png</iconset>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QToolButton" name="tbMacMinus">
+             <property name="text">
+              <string>...</string>
+             </property>
+             <property name="icon">
+              <iconset resource="../resources.qrc">
+               <normaloff>:/new/icons/minus.png</normaloff>:/new/icons/minus.png</iconset>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>DropTableWidget</class>
+   <extends>QTableWidget</extends>
+   <header>droptablewidget.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/packageWizard/packagepagefinal.cpp
===================================================================
--- s10k/Vago/packageWizard/packagepagefinal.cpp	(revision 1092)
+++ s10k/Vago/packageWizard/packagepagefinal.cpp	(revision 1092)
@@ -0,0 +1,37 @@
+#include "packagepagefinal.h"
+#include "ui_packagepagefinal.h"
+
+PackagePageFinal::PackagePageFinal(QSettings *vagoSettings, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::PackagePageFinal)
+{
+    ui->setupUi(this);
+    this->setTitle("Finished");
+
+    ui->lbComplete->setText("<html>"
+                            "The wizard is now complete. The package will be created when you click in finish.<br/>"
+                            "After that you can upload the package to <a href='http://"+GlobalVars::ModsDomain+"'>"
+                            +GlobalVars::ModsDomain+"</a> to get your mod listed in the AEI."
+                            "</html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+
+    ui->lbComplete->setOpenExternalLinks(true); //allow navigate to mod depot
+
+    //Default checkboxes values
+    if(!vagoSettings->contains("PackageCreator/OpenFolder")){
+        vagoSettings->setValue("PackageCreator/OpenFolder", true);
+    }
+    if(!vagoSettings->contains("PackageCreator/CreateZip")){
+        vagoSettings->setValue("PackageCreator/CreateZip",true);
+    }
+
+    //remember them next time
+    ui->cbOpenFolder->setChecked(vagoSettings->value("PackageCreator/OpenFolder").toBool());
+    ui->cbCreateZip->setChecked(vagoSettings->value("PackageCreator/CreateZip").toBool());
+    registerField("cbOpenFolder", ui->cbOpenFolder);
+    registerField("cbCreateZip", ui->cbCreateZip);
+}
+
+PackagePageFinal::~PackagePageFinal()
+{
+    delete ui;
+}
Index: s10k/Vago/packageWizard/packagepagefinal.h
===================================================================
--- s10k/Vago/packageWizard/packagepagefinal.h	(revision 1092)
+++ s10k/Vago/packageWizard/packagepagefinal.h	(revision 1092)
@@ -0,0 +1,25 @@
+#ifndef PACKAGEPAGEFINAL_H
+#define PACKAGEPAGEFINAL_H
+
+#include "utilvago.h"
+
+#include <QWizardPage>
+#include <QSettings>
+
+namespace Ui {
+class PackagePageFinal;
+}
+
+class PackagePageFinal : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit PackagePageFinal(QSettings *vagoSettings, QWidget *parent=0);
+    ~PackagePageFinal();
+    
+private:
+    Ui::PackagePageFinal *ui;
+};
+
+#endif // PACKAGEPAGEFINAL_H
Index: s10k/Vago/packageWizard/packagepagefinal.ui
===================================================================
--- s10k/Vago/packageWizard/packagepagefinal.ui	(revision 1092)
+++ s10k/Vago/packageWizard/packagepagefinal.ui	(revision 1092)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PackagePageFinal</class>
+ <widget class="QWizardPage" name="PackagePageFinal">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>595</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="lbComplete">
+     <property name="text">
+      <string>The wizard is now complete. Edit this text in packagepagefinal.cpp</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>30</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>After the package creation</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QCheckBox" name="cbOpenFolder">
+        <property name="text">
+         <string>Open the folder automatically where the package resides</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbCreateZip">
+        <property name="text">
+         <string>Automatically create a zip archive for the package</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/packageWizard/packagewizard.cpp
===================================================================
--- s10k/Vago/packageWizard/packagewizard.cpp	(revision 1092)
+++ s10k/Vago/packageWizard/packagewizard.cpp	(revision 1092)
@@ -0,0 +1,179 @@
+#include "packagewizard.h"
+
+PackageWizard::PackageWizard(const QString &appDir, QString workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger)
+    :AbstractWizard(appDir, workspaceWizardLocation, vagoSettings, myLogger, false)
+{
+    this->packagesLocation=this->workspaceWizardLocation+"/Packages";
+}
+
+void PackageWizard::exec(){
+    PackagePage2 *page2 = new PackagePage2(this->myLogger);
+    PackagePage3 *page3 = new PackagePage3();
+    PackagePage4 *page4 = new PackagePage4();
+    this->page4Pointer = page4; // save the pointer in class variable
+    PackagePageFinal *pageFinal = new PackagePageFinal(this->vagoSettings);
+
+    myWizard.addPage(
+        createIntroPage(
+                        "Welcome to the Anniversary Edition Installer 2 (AIE2) package"
+                         " creator wizard.\n"
+                         "This wizard will allow you to create in a few and simple steps a package for AIE2."
+                        )
+   );
+    myWizard.addPage(page2);
+    myWizard.addPage(page3);
+    myWizard.addPage(page4);
+    myWizard.addPage(pageFinal);
+
+    showWizard("AIE2 Package Creator", ":/new/icons/package.png");
+}
+
+
+void PackageWizard::createPackage(){
+    const QString aeVersion="2.0";
+
+    //Get info page 2
+    QString modName=this->myWizard.field("leModName").toString();
+    QString authors=this->myWizard.field("leAuthors").toString();
+    QString version=this->myWizard.field("leVersion").toString();
+    QString description=this->myWizard.field("ptDescription").toString();
+    QString packageNumber=this->myWizard.field("lePackageNumber").toString();
+    bool bslReplace=this->myWizard.field("rbReplace").toBool();
+
+    //Get info page 3
+    QString dependentPackages=this->myWizard.field("leDependentPackages").toString();
+    QString incompatiblePackages=this->myWizard.field("leIncompatiblePackages").toString();
+    QString unlockLevels=this->myWizard.field("leUnlockLevels").toString();
+
+    //Get info page 4
+    const DropTableWidget *commonTable=this->page4Pointer->commonTable;
+    const DropTableWidget *windowsTable=this->page4Pointer->windowsTable;
+    const DropTableWidget *macTable=this->page4Pointer->macTable;
+
+    //Get info from final page
+    bool openFolder=this->myWizard.field("cbOpenFolder").toBool();
+    bool createZip=this->myWizard.field("cbCreateZip").toBool();
+    //Remember the final page choices to next time
+    this->vagoSettings->setValue("PackageCreator/OpenFolder",openFolder);
+    this->vagoSettings->setValue("PackageCreator/CreateZip",createZip);
+
+    const QString packageName=packageNumber+Util::fullTrim(modName);
+
+    // Start package creation...
+
+    // Create Packages folder if it doesn't exist
+    if(!QDir(this->packagesLocation).exists()){
+        QDir().mkpath(this->packagesLocation);
+    }
+
+    QString modDir=this->packagesLocation+"/"+packageName+"/";
+
+    QDir().mkdir(modDir);
+
+    bool bslExist=false;
+
+    if(commonTable->rowCount()>0){
+        copyPackageFolders(commonTable,"common",modDir,bslExist);
+    }
+
+    if(windowsTable->rowCount()>0){
+        copyPackageFolders(windowsTable,"win_only",modDir,bslExist);
+    }
+
+    if(macTable->rowCount()>0){
+        copyPackageFolders(macTable,"mac_only",modDir,bslExist);
+    }
+
+    QFile modInfo(modDir+"Mod_Info.cfg");
+
+    if (!modInfo.open(QIODevice::WriteOnly | QIODevice::Text)){ //open to write
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "Couldn't create Mod_Info.cfg file when creating AE Package.");
+        return;
+    }
+
+    QTextStream modWriteStream(&modInfo);
+    modWriteStream << "AEInstallVersion -> "+aeVersion+"\n";
+    modWriteStream << "NameOfMod -> "+modName+"\n";
+    modWriteStream << "ModVersion -> "+version+"\n";
+    modWriteStream << "Creator -> "+authors+"\n";
+    modWriteStream << "Readme -> "+description.replace("\n"," \\n ")+"\n";
+    if(!incompatiblePackages.isEmpty()){
+        modWriteStream << "IncompatibleWith -> "+incompatiblePackages+"\n";
+    }
+    if(!dependentPackages.isEmpty()){
+        modWriteStream << "DependsOn -> "+dependentPackages+"\n";
+    }
+
+    if(bslExist){
+        if(bslReplace){
+            modWriteStream << "HasBsl -> Yes\n";
+        }
+        else{
+            modWriteStream << "HasBsl -> Addon\n";
+        }
+    }
+
+    if(!unlockLevels.isEmpty()){
+        modWriteStream << "UnlockLevel -> "+unlockLevels+"\n";
+    }
+
+    modWriteStream << "Vago -> "+GlobalVars::AppVersion;
+
+    modInfo.close();
+
+    if(createZip){
+        if(!JlCompress::compressDir(this->packagesLocation+"/"+packageName+".zip", modDir)){
+            UtilVago::showAndLogErrorPopUp(this->myLogger, "An error occurred while zipping the package.");
+        }
+    }
+
+    if(openFolder){
+        QDesktopServices::openUrl(QUrl("file:///"+this->packagesLocation));
+    }
+}
+
+void PackageWizard::copyPackageFolders(const DropTableWidget *myTable, QString tableDir, QString modDir, bool &bslExist){
+
+    QString sourceFolder;
+    bool onisExist=false;
+    QString path;
+
+    for(int i=0; i<myTable->rowCount(); i++){
+
+        sourceFolder=myTable->item(i,2)->text();
+
+        if(myTable->item(i,1)->text()==".oni"){
+            path=modDir+"oni/"+tableDir;
+            if(!onisExist){
+                onisExist=true;
+            }
+        }
+        else if(myTable->item(i,1)->text()==".bsl"){
+            path=modDir+"bsl/"+tableDir;
+            if(!bslExist){
+                bslExist=true;
+            }
+        }
+        else{
+            path=modDir+"patches/"+tableDir;
+            if(!bslExist){
+                bslExist=true;
+            }
+        }
+        QDir().mkpath(path); //create path if doesn't exist
+        if(!Util::copyDir(sourceFolder,path,false)){//copy contents (creates dest destination automatically if not exists yet)
+
+         UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "An error occurred while copying the folder/files to the package folder: \n"
+                                                        "Copying from "+sourceFolder+"\n to "+path);
+        }
+    }
+}
+
+void PackageWizard::beforeClose(QDialog::DialogCode resultStatus){
+
+    //If wizard finished with sucess, create the package
+    if(resultStatus == QDialog::Accepted){
+        createPackage();
+    }
+}
+
Index: s10k/Vago/packageWizard/packagewizard.h
===================================================================
--- s10k/Vago/packageWizard/packagewizard.h	(revision 1092)
+++ s10k/Vago/packageWizard/packagewizard.h	(revision 1092)
@@ -0,0 +1,26 @@
+#ifndef PACKAGEWIZARD_H
+#define PACKAGEWIZARD_H
+
+#include "abstractwizard.h"
+#include "packagepage2.h"
+#include "packagepage3.h"
+#include "packagepage4.h"
+#include "packagepagefinal.h"
+
+#include <JlCompress.h>
+
+class PackageWizard: public AbstractWizard // for signals and slots
+{
+private:
+    QString packagesLocation;
+    PackagePage4 *page4Pointer = nullptr;
+private:
+    void copyPackageFolders(const DropTableWidget *myTable, QString tableDir, QString modDir, bool &bslExist);
+    void createPackage();
+    void beforeClose(QDialog::DialogCode resultStatus);
+protected:
+    PackageWizard(const QString &appDir, QString workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger);
+    void exec();
+};
+
+#endif // PACKAGEWIZARD_H
Index: s10k/Vago/preferences.cpp
===================================================================
--- s10k/Vago/preferences.cpp	(revision 1092)
+++ s10k/Vago/preferences.cpp	(revision 1092)
@@ -0,0 +1,105 @@
+#include "preferences.h"
+#include "ui_preferences.h"
+
+Preferences::Preferences(QWidget *parent, QSettings *vagoSettings) :
+    QDialog(parent),
+    ui(new Ui::Preferences)
+{
+    ui->setupUi(this);
+    this->setAttribute(Qt::WA_DeleteOnClose,true ); //destroy itself once finished.
+
+    this->vagoSettings=vagoSettings;
+
+    ui->leAEfolder->setText(this->vagoSettings->value("AeFolder").toString());
+    ui->leWorkspace->setText(this->vagoSettings->value("Workspace").toString());
+    ui->leWidth->setText(this->vagoSettings->value("WindowWidth").toString());
+    ui->leHeight->setText(this->vagoSettings->value("WindowHeight").toString());
+    ui->cbOniWindow->setChecked(this->vagoSettings->value("OniWindow").toBool());
+    ui->cbSeparate->setChecked(this->vagoSettings->value("SeparateInWorkspace").toBool());
+    ui->cbAskSaveProject->setChecked(this->vagoSettings->value("AskSaveProject").toBool());
+    ui->cbAskOpenLastProject->setChecked(this->vagoSettings->value("AskToOpenLastProject").toBool());
+#ifdef Q_OS_MAC
+    ui->cbUseYesAsDefaultWhenRemovingItems->setChecked(this->vagoSettings->value("useYesAsDefaultWhenRemovingItems").toBool());
+#endif
+
+#ifdef Q_OS_WIN
+    ui->cbUseYesAsDefaultWhenRemovingItems->hide(); // don't display this mac os only option in windows
+#endif
+
+}
+
+Preferences::~Preferences()
+{
+    delete ui;
+}
+
+// Need to override to do the verification
+// http://stackoverflow.com/questions/3261676/how-to-make-qdialogbuttonbox-not-close-its-parent-qdialog
+void Preferences::accept (){
+    QStringList options;
+    QRect screenRes = Util::getScreenResolution();
+
+    options << ui->leAEfolder->text() << ui->leWorkspace->text() << ui->leWidth->text() << ui->leHeight->text();
+
+    if(Util::checkEmptySpaces(options)){
+        Util::showErrorPopUp("Setting not saved! There are empty settings.");
+        return;
+    }
+
+    if(Util::checkIfIntegers(QStringList() << ui->leWidth->text() << ui->leHeight->text() )){
+        Util::showErrorPopUp("Setting not saved! Width and Height must be numbers.");
+        return;
+    }
+
+    if(ui->leWidth->text().toInt() > screenRes.width() || ui->leHeight->text().toInt() > screenRes.height()){
+        Util::showErrorPopUp("Setting not saved! Width or Height specified are greater than actual screen resolution.");
+        return;
+    }
+
+    if(ui->leWidth->text().toInt() <= 0  || ui->leHeight->text().toInt() <= 0 ){
+        Util::showErrorPopUp("Settings not saved! Width and Height must be greater than 0.");
+        return;
+    }
+
+    this->vagoSettings->setValue("AeFolder",ui->leAEfolder->text());
+    this->vagoSettings->setValue("Workspace",ui->leWorkspace->text());
+    this->vagoSettings->setValue("WindowWidth",ui->leWidth->text());
+    this->vagoSettings->setValue("WindowHeight",ui->leHeight->text());
+    this->vagoSettings->setValue("OniWindow",ui->cbOniWindow->isChecked());
+    this->vagoSettings->setValue("SeparateInWorkspace",ui->cbSeparate->isChecked());
+    this->vagoSettings->setValue("AskSaveProject",ui->cbAskSaveProject->isChecked());
+    this->vagoSettings->setValue("AskToOpenLastProject",ui->cbAskOpenLastProject->isChecked());
+#ifdef Q_OS_MAC
+    this->vagoSettings->setValue("useYesAsDefaultWhenRemovingItems",ui->cbUseYesAsDefaultWhenRemovingItems->isChecked());
+#endif
+
+    Util::showPopUp("You need to restart the application to all changes take effect.");
+
+    QDialog::accept();
+}
+
+void Preferences::on_pbChooseWorkspace_clicked()
+{
+    QString newDir=QFileDialog::getExistingDirectory(this,"Choose workspace folder...");
+    newDir=Util::normalizePath(newDir);
+
+    if(!newDir.isEmpty()){
+        ui->leWorkspace->setText(newDir);
+    }
+}
+
+void Preferences::on_pbChooseAE_clicked()
+{
+    QString newDir=QFileDialog::getExistingDirectory(this,"Choose AE folder...");
+    newDir=Util::normalizePath(newDir);
+
+    if(!newDir.isEmpty()){
+        ui->leAEfolder->setText(newDir);
+    }
+}
+
+void Preferences::on_buttonBox_rejected()
+{
+    this->destroy(true,true);
+}
+
Index: s10k/Vago/preferences.h
===================================================================
--- s10k/Vago/preferences.h	(revision 1092)
+++ s10k/Vago/preferences.h	(revision 1092)
@@ -0,0 +1,39 @@
+#ifndef PREFERENCES_H
+#define PREFERENCES_H
+
+#include <QDialog>
+#include <QFileDialog>
+#include <QSettings>
+#include <QMessageBox>
+
+#include "utilvago.h"
+
+namespace Ui {
+class Preferences;
+}
+
+class Preferences : public QDialog
+{
+    Q_OBJECT
+    
+public:
+    Preferences(QWidget *parent, QSettings *vagoSettings);
+    ~Preferences();
+
+public slots:
+    void accept ();
+    
+private slots:
+
+    void on_pbChooseWorkspace_clicked();
+
+    void on_pbChooseAE_clicked();
+
+    void on_buttonBox_rejected();
+
+private:
+    Ui::Preferences *ui;
+    QSettings *vagoSettings;
+};
+
+#endif // PREFERENCES_H
Index: s10k/Vago/preferences.ui
===================================================================
--- s10k/Vago/preferences.ui	(revision 1092)
+++ s10k/Vago/preferences.ui	(revision 1092)
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Preferences</class>
+ <widget class="QDialog" name="Preferences">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>493</width>
+    <height>297</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Vago Preferences</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Preferences</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <layout class="QFormLayout" name="formLayout">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Vago Workspace Folder:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>Anniversary Edition Folder:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_3">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Default Vago Window Resolution:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <layout class="QHBoxLayout" name="horizontalLayout">
+          <item>
+           <widget class="QLineEdit" name="leWorkspace"/>
+          </item>
+          <item>
+           <widget class="QPushButton" name="pbChooseWorkspace">
+            <property name="text">
+             <string>Choose</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+        <item row="1" column="1">
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <widget class="QLineEdit" name="leAEfolder"/>
+          </item>
+          <item>
+           <widget class="QPushButton" name="pbChooseAE">
+            <property name="text">
+             <string>Choose</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+        <item row="2" column="1">
+         <layout class="QHBoxLayout" name="horizontalLayout_3">
+          <item>
+           <widget class="QLineEdit" name="leWidth">
+            <property name="placeholderText">
+             <string>Width</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLabel" name="label_4">
+            <property name="text">
+             <string>x</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLineEdit" name="leHeight">
+            <property name="placeholderText">
+             <string>Height</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbOniWindow">
+        <property name="text">
+         <string>Launch Oni in a window</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbSeparate">
+        <property name="toolTip">
+         <string>Separate conversions by folders. For example: &quot;Textures&quot; -&gt; &quot;DAT_ONI - DDS&quot;</string>
+        </property>
+        <property name="text">
+         <string>Separate different conversions in workspace</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbUseYesAsDefaultWhenRemovingItems">
+        <property name="text">
+         <string>Use Yes button as default when removing items</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbAskSaveProject">
+        <property name="toolTip">
+         <string>Shows a questions prompt to save current project if any unsaved changes are found. Asked when user tries to create a new project, load a project or exit the application.</string>
+        </property>
+        <property name="text">
+         <string>Ask to save project if there are unsaved changes</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbAskOpenLastProject">
+        <property name="text">
+         <string>Ask to open last saved project at startup</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>Preferences</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>Preferences</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
Index: s10k/Vago/readme.txt
===================================================================
--- s10k/Vago/readme.txt	(revision 1092)
+++ s10k/Vago/readme.txt	(revision 1092)
@@ -0,0 +1,202 @@
+Readme.txt
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Vago GUI v1.3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+----------------------------------
+Description:
+----------------------------------
+
+An user interface application to use OniSplit in Windows / Mac OS.
+
+OniSplit:
+"OniSplit, written by Neo, is an integral part of the Anniversary Edition and an essential modding tool on its own. 
+It is able to import and export many kinds of Oni game data, such as textures, sound, 3D models, level geometry & 
+combat animations and is also able to split & recombine Oni's data files. It's functions supersede those of OUP & 
+OME and is currently the community's modding tool of choice."
+
+----------------------------------
+Installation (standalone version):
+----------------------------------
+
+Extract Vago folder to any place in your computer. At first run select your Anniversary Edition folder.
+
+----------------------------------
+Contacts:
+----------------------------------
+
+s10k, "faob2@hotmail.com"
+
+Oni Central Forum:
+http://oni.bungie.org
+->Select forum
+
+Oni Wiki:
+http://wiki.oni2.net
+
+----------------------------------
+Change Log:
+----------------------------------
+1.3, 09-12-2016
+- Changed Sound Wizard default settings to create files that are playable as music ingame
+- Now wizards have no longer modal windows. You can minimize and open multiple at the same time
+- Added some tooltips to XmlTools interface
+- Added wizard to create ingame pages like weapon / item pages or text for consoles
+- Added drag and drop support to Extract TRAM with TRBS/ONCC
+- Changed the layout of about dialog
+----------------------------------
+1.2, 30-10-2016
+- Upgraded to XmlTools 2.0c
+- Added a XmlTools interface. Click in the XML icon in the main window.
+- Now in manual commands you can choose if you want to call OniSplit or XmlTools
+- Now manual commands behaves likes an independent window
+- Fixed additional sources in levels tab when loading project
+- Interface was asking user for additional sources and bnv source files when this 
+options were checked in levels tab when a project was loading. This was fixed.
+- Fixed background image page 2 layout when the image name is large
+----------------------------------
+1.1, 12-10-2016
+- Added wizard to create background images
+- Added OSBD imp creation to Sound wizard page
+- Added option to Vago ask at the startup if the user wants to load lastest saved project
+- Added new project action to file menu
+- Replaced "Always confirm Vago exit" option with an option to save the current 
+project (if there are unsaved changes)
+- Fixed drag and drop bug wich caused the multiplication of the dropped files
+- Moved preferences from file to options menu
+- Fixed Max ElapsedTime property recognition in Sound Wizard (Amb page)
+- Now the sound wizard drops all the files used in the user workspace 
+(including the XML files used to create the OSBD oni files)
+----------------------------------
+1.0, 17-09-2016
+- Added feature to save and restore vago projects (plus load recent projects)
+Projects are in XML format and are read with the pugixml library
+- Added keyboard shortchut to the convert button
+- Some code refactoring and started using C++14
+- Fixed zip support for anniversary edition packages, switched to the zip library QuaZIP
+- Fixed the anniversary edition packages creation on Windows {windows-change}
+- Added extra logging
+- Added Windows 7 and above conversions progress in taskbar {windows-change}
+- Upgraded XmlTools from 0.8d to 2.0b
+- Fixed libpng warning: iCCP: known incorrect sRGB profile
+----------------------------------
+0.9c, 02-04-2016
+- Fixed ONI FILES to DAT - Add button does not let to select a folder
+- Some minor fixes in the AEI Mod Package Wizard
+----------------------------------
+0.9b, 24-03-2016
+- Fixes for Mac OS X 10.11: fixed OniSplit integration, fixed startup bug (Iritsen's fix), 
+fixed bug when copying and creating AEI packages
+- Fixed OniSplit command in Sound Package Wizard
+----------------------------------
+0.9a, 25-04-2014
+-Upgraded Qt libraries to version 5
+-Updated OniSplit to 0.9.96.0 version
+-Fixed the bug where the items loaded counter in status bar wasn't updated 
+when changing tabs
+-Now levels->dat - oni files get extracted to a subfolder with the level's
+extracted name (requested by paradox)
+-Now in Mac OS is possible to choose Yes button by default when clearing the 
+files contents (requested by edt)
+----------------------------------
+0.9, 08-01-2014
+-Updated OniSplit to 0.9.94.0 version
+-Added option to open AE folder
+-Redesigned the tabs of file conversions and its options (thanks paradox!)
+-Windows version also starts with a resolution of 800x600 as Mac did before
+-Added option in preferences to user set up the default window resolution
+-Added option to abort conversion
+-Textures tab: TGA made as default image type for .oni conversions
+-Levels tab: Added option to extract only specific files from DAT files
+-Characters tab: Added option to convert TRAM XML > TRBS ONI
+-Characters tab: Added option to convert TRAM ONI > XML / XML & DAE
+----------------------------------
+0.8, 01-04-2012
+-Updated OniSplit to 0.9.86.0 version
+-Added Animations tab and options to export OBAN as dae, plus option to
+export "saved_films*.dat" as XML
+-Fixed AEI2 launch button
+-Added patch support in AEI2 package wizard
+-Added wizard to convert sounds to oni (thanks paradox, 
+have based in your excel macro)
+-Added xmlTools 0.8d as part of the framework (like onisplit)
+----------------------------------
+0.7, 10-02-2012
+-Updated to support the AEI2
+-Added wizard to create AEI2 packages
+-Added zip option to packages
+-Fixed check packages number (using new method, thanks Alloc!)
+-Fixed check for vago updates
+----------------------------------
+0.6a, 22-09-2012
+-Fixed the table tooltips disappearing when changing items order
+----------------------------------
+0.6, 11-09-2012
+-Added option to view log in option menu and also in error dialogs
+-Number of characters in oni split errors limited
+-When executing only one task, progess bar will be intermitent
+-Fixed About dialog image (didn't know that qt needed a plugin for jpg files)
+-Taskbar now flashes if a task is done and the Vago windows is not the window active
+-Added context menu with the following options: change items order, disable items
+processing, change items to the current settings, change specified items to output
+to a specified folder, copy items to clipboard
+-Added tooltips to every row and column to be processed (it's easier to check the
+command for each file for example)
+-Added wav/aif > oni conversion
+-Now .dat is added when a filename (to be exported as .dat) is inputted without 
+extension
+-Now the number of errors is showed
+-Added option to extract a dae with a specified animation
+----------------------------------
+0.5b, 28-07-2012
+-Fixed another small typo in the from/to description
+----------------------------------
+0.5a, 28-07-2012
+-Fixed two typos. EnvMap at Textures and at Texture Models were asking 
+for a .oni absolute file when it only needs the filename without the .oni
+extension
+----------------------------------
+0.5, 26-07-2012
+-Now every result of a conversion or package is separated in folders 
+in the workspace by default. This can be disabled in preferences
+-Added an icon
+-Changed About dialog
+-It now checks if every entry of ini exists at the begin
+-Added option to clear everything in packages
+-Added option to change output folder at anytime, this allows for example
+output a level directly to it's correct folder for easy testing. It is
+also simple to change between the workspace and another output folder
+-Fixed bug when selecting multiple dirs and the user cancelled which 
+still resulted in returning the files selected
+----------------------------------
+0.4, 25-07-2012
+-Fixed a typo in Packages creating making scripts installation fail
+-Added option to create AKEV from env.dae and bnv.dae, plus others resources 
+plus the ability to generate the path finding grids for AKEVs automatically
+-Added manual oni split commands input
+----------------------------------
+0.3, 22-07-2012
+-Implemented Packages tab functionality
+-Implemented check for Vago updates functionality
+-Fixed a bug in "extract an ONCC with another character's TRAM" 
+(command bad built)
+-Fixed an index out range bug when multiple selections in tables (when removing)
+----------------------------------
+0.2, 19-07-2012
+-It now checks for OniSplit at each run and exits if it's not found
+-Option to check onisplit version from gui
+-Optimized the code and made it more modular
+-Added -search ../GameDataFolder/level0_Final to AKEV (ONI) > DAE
+-Added JPG support for textures
+-Added -extract:xml  <target directory> -anim-body: ONCCsource  TRAMsource 
+(extract an ONCC with another character's TRAM)
+-Fixed a bug in ONI->DAT conversion (command bad built)
+-Added folder drag n' drop and checks if the current operation only work 
+with files or folders
+-Added items loaded at status bar
+----------------------------------
+0.1a, 15-07-2012
+-Fixed a bug with spaces in directories
+----------------------------------
+0.1, 15-07-2012
+-Initial Version
Index: s10k/Vago/resources.qrc
===================================================================
--- s10k/Vago/resources.qrc	(revision 1092)
+++ s10k/Vago/resources.qrc	(revision 1092)
@@ -0,0 +1,33 @@
+<RCC>
+    <qresource prefix="/new/icons">
+        <file>oni_icon.png</file>
+        <file>AE_icon.png</file>
+        <file>command_icon.png</file>
+        <file>vago_icon.png</file>
+        <file>folder_icon.png</file>
+        <file>minus.png</file>
+        <file>plus.png</file>
+        <file>switch.png</file>
+        <file>package.png</file>
+        <file>log.png</file>
+        <file>toolPackage.png</file>
+        <file>sound.png</file>
+        <file>oni_icon_mac.png</file>
+        <file>abort.png</file>
+        <file>background_image.png</file>
+        <file>xmltoolsinterface.png</file>
+        <file>windowmessages.png</file>
+        <file>formatting_bold.png</file>
+        <file>formatting_color.png</file>
+        <file>formatting_italic.png</file>
+        <file>formatting_underline.png</file>
+    </qresource>
+    <qresource prefix="/new/about">
+        <file>about.png</file>
+    </qresource>
+    <qresource prefix="/new">
+        <file>sampleFiles/OSBDsample_file.amb.xml</file>
+        <file>sampleFiles/OSBDsample_file.grp.xml</file>
+        <file>sampleFiles/OSBDsample_file.imp.xml</file>
+    </qresource>
+</RCC>
Index: s10k/Vago/sampleFiles/OSBDsample_file.amb.xml
===================================================================
--- s10k/Vago/sampleFiles/OSBDsample_file.amb.xml	(revision 1092)
+++ s10k/Vago/sampleFiles/OSBDsample_file.amb.xml	(revision 1092)
@@ -0,0 +1,27 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Oni>
+    <AmbientSound>
+        <Priority>Normal</Priority>
+        <Flags></Flags>
+        <DetailTrackProperties>
+            <SphereRadius>10</SphereRadius>
+            <ElapsedTime>
+                <Min>1</Min>
+                <Max>1</Max>
+            </ElapsedTime>
+        </DetailTrackProperties>
+        <Volume>
+            <Distance>
+                <Min>10</Min>
+                <Max>50</Max>
+            </Distance>
+        </Volume>
+        <DetailTrack></DetailTrack>
+        <BaseTrack1>sample_file</BaseTrack1>
+        <BaseTrack2></BaseTrack2>
+        <InSound></InSound>
+        <OutSound></OutSound>
+        <Treshold>1</Treshold>
+        <MinOcclusion>0</MinOcclusion>
+    </AmbientSound>
+</Oni>
Index: s10k/Vago/sampleFiles/OSBDsample_file.grp.xml
===================================================================
--- s10k/Vago/sampleFiles/OSBDsample_file.grp.xml	(revision 1092)
+++ s10k/Vago/sampleFiles/OSBDsample_file.grp.xml	(revision 1092)
@@ -0,0 +1,23 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Oni>
+    <SoundGroup>
+        <Volume>1</Volume>
+        <Pitch>0</Pitch>
+        <Flags></Flags>
+        <NumberOfChannels>2</NumberOfChannels>
+        <Permutations>
+            <Permutation>
+                <Weight>1</Weight>
+                <Volume>
+                    <Min>1</Min>
+                    <Max>1</Max>
+                </Volume>
+                <Pitch>
+                    <Min>0</Min>
+                    <Max>0</Max>
+                </Pitch>
+                <Sound>sample_file.wav</Sound>
+            </Permutation>
+        </Permutations>
+    </SoundGroup>
+</Oni>
Index: s10k/Vago/sampleFiles/OSBDsample_file.imp.xml
===================================================================
--- s10k/Vago/sampleFiles/OSBDsample_file.imp.xml	(revision 1092)
+++ s10k/Vago/sampleFiles/OSBDsample_file.imp.xml	(revision 1092)
@@ -0,0 +1,24 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Oni>
+    <ImpulseSound>
+        <Group>sample_file</Group>
+        <Priority>Normal</Priority>
+        <Volume>
+            <Distance>
+                <Min>15</Min>
+                <Max>80</Max>
+            </Distance>
+            <Angle>
+                <Min>360</Min>
+                <Max>360</Max>
+                <MinAttenuation>1</MinAttenuation>
+            </Angle>
+        </Volume>
+        <AlternateImpulse>
+            <Treshold>0</Treshold>
+            <Impulse></Impulse>
+        </AlternateImpulse>
+        <ImpactVelocity>0</ImpactVelocity>
+        <MinOcclusion>0</MinOcclusion>
+    </ImpulseSound>
+</Oni>
Index: s10k/Vago/soundWizard/soundpage2.cpp
===================================================================
--- s10k/Vago/soundWizard/soundpage2.cpp	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage2.cpp	(revision 1092)
@@ -0,0 +1,146 @@
+#include "soundpage2.h"
+#include "ui_soundpage2.h"
+
+const QStringList SoundPage2::allowedFiles = QStringList() << "*.wav" <<  "*.aif" <<  "*.aifc" << "*.afc";
+
+SoundPage2::SoundPage2(QString appLocation, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::soundpage2)
+{
+    ui->setupUi(this);
+    this->soundTable=ui->twSoundFiles;
+    this->codecLocalHelpFile=appLocation+"/"+GlobalVars::HelpDir + "/XMLSNDD.html#Source_file_creation";
+    ui->twSoundFiles->removeColumn(2); // Only two columns
+
+    ui->label->setText("<html>Add here the files you want to convert. "
+                       "All the files will have the same properties applied.<br/>"
+                       "Don't forget to first convert the files to an oni compatible codec. "
+                       "More information <a href='file:///"+this->codecLocalHelpFile+"'>here.</a></html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+
+    // Drop signal for Packages table
+    connect(ui->twSoundFiles, SIGNAL(dropped(DropTableWidget*,QStringList)), this, SLOT(addResourcesSounds(DropTableWidget*,QStringList)));
+    // Signal for click in label (display local help)
+    connect(ui->label, SIGNAL(linkActivated(const QString & )), this, SLOT(openCodecLocalHelp()));
+
+    //Register fields to be accessible in another pages
+    registerField("rbOther", ui->rbOther);
+    registerField("leOtherLocation", ui->leOtherLocation);
+}
+
+SoundPage2::~SoundPage2()
+{
+    delete ui;
+}
+
+void SoundPage2::on_rbOther_toggled(bool checked)
+{
+    if(checked){
+        ui->leOtherLocation->setEnabled(true);
+        ui->pbBrowserOtherLocation->setEnabled(true);
+        return;
+    }
+
+    ui->leOtherLocation->setEnabled(false);
+    ui->pbBrowserOtherLocation->setEnabled(false);
+}
+
+void SoundPage2::on_tbAddFiles_clicked()
+{
+    addResourcesSounds(ui->twSoundFiles,QFileDialog::getOpenFileNames(this,"Choose the sound files...","./" , "Audio (" + this->allowedFiles.join(" ") + ")"));
+}
+
+void SoundPage2::on_tbRemoveFiles_clicked()
+{
+    int size = ui->twSoundFiles->selectionModel()->selectedRows().size();
+
+    if(size==0){
+        Util::showPopUp("Select a row first.");
+        return;
+    }
+
+    if(Util::showQuestionPopUp(this,"Are you sure you want to delete the selected rows?")){
+        for(int i=0; i<size; i++){
+            ui->twSoundFiles->removeRow(ui->twSoundFiles->selectionModel()->selectedRows().at(size-i-1).row());
+        }
+    }
+}
+
+void SoundPage2::addResourcesSounds(DropTableWidget *myTable, QStringList resources){
+
+    bool fileExtValid=false;
+
+    //Pre-processing (check if received only folders)
+    foreach(QString myFile, resources){
+        QString currFileExt="."+QFileInfo(myFile).completeSuffix();
+        if(QDir(myFile).exists()){
+            Util::showErrorPopUp("Only files are allowed for this operation.");
+            return;
+        }
+
+        foreach(QString vext, this->allowedFiles){
+            vext.remove("*");
+            if(currFileExt.endsWith(vext)){
+                fileExtValid=true;
+                break;
+            }
+        }
+
+        if(!fileExtValid){
+            Util::showErrorPopUp("Files must be in the follow formats:\n" +
+                                 this->allowedFiles.join(" "));
+            return;
+        }
+    }
+
+    foreach(QString currentFile, resources){
+
+        //Get actual number rows
+        int twSize=myTable->rowCount();
+
+        //increase the rows for the new item
+        myTable->setRowCount(twSize+1);
+
+        //Add to table and list to
+        QTableWidgetItem *newName = new QTableWidgetItem(QFileInfo(currentFile).baseName());
+        QTableWidgetItem *newFileLocation = new QTableWidgetItem(Util::normalizePath(currentFile));
+
+        myTable->setItem(twSize,0,newName);
+        myTable->setItem(twSize,1,newFileLocation);
+        myTable->updateTableToolTips(twSize); //Update tool tips
+    }
+}
+
+void SoundPage2::on_pbBrowserOtherLocation_clicked()
+{
+    ui->leOtherLocation->setText(QFileDialog::getExistingDirectory(this,"Choose output folder..."));
+}
+
+void SoundPage2::openCodecLocalHelp(){
+    QDesktopServices::openUrl(QUrl("file:///"+this->codecLocalHelpFile));
+}
+
+bool SoundPage2::validatePage(){
+
+    QStringList namesList;
+
+    if(ui->twSoundFiles->rowCount()==0){
+        Util::showErrorPopUp("You need to add some sound files first!");
+        return false;
+    }
+
+    for(int i=0; i<ui->twSoundFiles->rowCount(); i++){
+        namesList << ui->twSoundFiles->item(i,0)->text();
+    }
+
+    if(ui->rbOther->isChecked() && Util::checkEmptySpaces(QStringList() << ui->leOtherLocation->text())){
+        Util::showErrorPopUp("Please input a directory to output the files.");
+        return false;
+    }
+
+    if(ui->rbOther->isChecked() && !QDir(ui->leOtherLocation->text()).exists()){
+        Util::showErrorPopUp("Invalid directory specified in other location. Please fix it.");
+        return false;
+    }
+
+    return true;
+}
Index: s10k/Vago/soundWizard/soundpage2.h
===================================================================
--- s10k/Vago/soundWizard/soundpage2.h	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage2.h	(revision 1092)
@@ -0,0 +1,44 @@
+#ifndef SOUNDPAGE2_H
+#define SOUNDPAGE2_H
+
+#include <QWizardPage>
+#include <droptablewidget.h>
+
+#include "util.h"
+
+namespace Ui {
+class soundpage2;
+}
+
+class SoundPage2 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    DropTableWidget *soundTable;
+
+    explicit SoundPage2(QString appLocation, QWidget *parent = 0);
+    ~SoundPage2();
+    
+private slots:
+    void addResourcesSounds(DropTableWidget *myTable, QStringList resources);
+
+    void on_rbOther_toggled(bool checked);
+
+    void on_tbAddFiles_clicked();
+
+    void on_tbRemoveFiles_clicked();
+
+    void on_pbBrowserOtherLocation_clicked();
+
+    void openCodecLocalHelp();
+
+private:
+    Ui::soundpage2 *ui;
+    static const QStringList allowedFiles;
+    QString codecLocalHelpFile;
+
+    bool validatePage();
+};
+
+#endif // SOUNDPAGE2_H
Index: s10k/Vago/soundWizard/soundpage2.ui
===================================================================
--- s10k/Vago/soundWizard/soundpage2.ui	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage2.ui	(revision 1092)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>soundpage2</class>
+ <widget class="QWizardPage" name="soundpage2">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <property name="title">
+   <string>Sound files to process</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_5">
+   <item>
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Edit this text in soundpage2.cpp</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>57</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Files to convert</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_4">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="DropTableWidget" name="twSoundFiles">
+          <attribute name="horizontalHeaderStretchLastSection">
+           <bool>true</bool>
+          </attribute>
+          <column>
+           <property name="text">
+            <string>Name</string>
+           </property>
+          </column>
+          <column>
+           <property name="text">
+            <string>File Location</string>
+           </property>
+          </column>
+         </widget>
+        </item>
+        <item>
+         <layout class="QVBoxLayout" name="verticalLayout">
+          <item>
+           <widget class="QToolButton" name="tbAddFiles">
+            <property name="toolTip">
+             <string>Add sound files</string>
+            </property>
+            <property name="text">
+             <string>...</string>
+            </property>
+            <property name="icon">
+             <iconset resource="../resources.qrc">
+              <normaloff>:/new/icons/plus.png</normaloff>:/new/icons/plus.png</iconset>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QToolButton" name="tbRemoveFiles">
+            <property name="toolTip">
+             <string>Remove selected sound files</string>
+            </property>
+            <property name="text">
+             <string>...</string>
+            </property>
+            <property name="icon">
+             <iconset resource="../resources.qrc">
+              <normaloff>:/new/icons/minus.png</normaloff>:/new/icons/minus.png</iconset>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>57</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Output converted files to:</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QRadioButton" name="rbWorkspace">
+        <property name="text">
+         <string>Workspace</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QRadioButton" name="rbOther">
+          <property name="enabled">
+           <bool>true</bool>
+          </property>
+          <property name="text">
+           <string>Other</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="leOtherLocation">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QPushButton" name="pbBrowserOtherLocation">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="text">
+           <string>Browse...</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>DropTableWidget</class>
+   <extends>QTableWidget</extends>
+   <header>droptablewidget.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/soundWizard/soundpage3.cpp
===================================================================
--- s10k/Vago/soundWizard/soundpage3.cpp	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage3.cpp	(revision 1092)
@@ -0,0 +1,52 @@
+#include "soundpage3.h"
+#include "ui_soundpage3.h"
+
+SoundPage3::SoundPage3(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::soundpage3)
+{
+    ui->setupUi(this);
+
+    //Register fields to be accessible in another pages
+
+    registerField("rbPriorityLow", ui->rbPriorityLow);
+    registerField("rbPriorityNormal", ui->rbPriorityNormal);
+    registerField("rbPriorityHigh", ui->rbPriorityHigh);
+    registerField("rbPriorityHighest", ui->rbPriorityHighest);
+    registerField("cbInterruptOnStop", ui->cbInterruptOnStop);
+
+    registerField("cbPlayOnce", ui->cbPlayOnce);
+    registerField("cbCanPan", ui->cbCanPan);
+
+    registerField("leSphereRadious", ui->leSphereRadious);
+    registerField("leMinElapsedTime", ui->leMinElapsedTime);
+    registerField("leMaxElapsedTime", ui->leMaxElapsedTime);
+    registerField("leMinVolumeDistance", ui->leMinVolumeDistance);
+    registerField("leMaxVolumeDistance", ui->leMaxVolumeDistance);
+    registerField("leMinOcclusion", ui->leMinOcclusion);
+    registerField("leTreshold", ui->leTreshold);
+}
+
+bool SoundPage3::validatePage(){
+    QStringList leContents;
+    leContents << ui->leSphereRadious->text() << ui->leMinElapsedTime->text() << ui->leMaxElapsedTime->text()
+                       << ui->leMinVolumeDistance->text() << ui->leMaxVolumeDistance->text() << ui->leMinOcclusion->text()
+                       << ui->leTreshold->text();
+
+    if(Util::checkEmptySpaces(leContents)){
+        Util::showErrorPopUp("Please fill all fields first!");
+        return false;
+    }
+
+    if(Util::checkIfDoubles(leContents)){
+        Util::showErrorPopUp("All fields must contains numbers!");
+        return false;
+    }
+
+    return true;
+}
+
+SoundPage3::~SoundPage3()
+{
+    delete ui;
+}
Index: s10k/Vago/soundWizard/soundpage3.h
===================================================================
--- s10k/Vago/soundWizard/soundpage3.h	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage3.h	(revision 1092)
@@ -0,0 +1,26 @@
+#ifndef SOUNDPAGE3_H
+#define SOUNDPAGE3_H
+
+#include <QWizardPage>
+
+#include "util.h"
+
+namespace Ui {
+class soundpage3;
+}
+
+class SoundPage3 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit SoundPage3(QWidget *parent = 0);
+    ~SoundPage3();
+    
+private:
+    Ui::soundpage3 *ui;
+
+    bool validatePage();
+};
+
+#endif // SOUNDPAGE3_H
Index: s10k/Vago/soundWizard/soundpage3.ui
===================================================================
--- s10k/Vago/soundWizard/soundpage3.ui	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage3.ui	(revision 1092)
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>soundpage3</class>
+ <widget class="QWizardPage" name="soundpage3">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>680</width>
+    <height>460</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <property name="title">
+   <string>OSBD.amb file properties</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_4">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Sound priority</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QRadioButton" name="rbPriorityLow">
+          <property name="text">
+           <string>Low</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbPriorityNormal">
+          <property name="text">
+           <string>Normal</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbPriorityHigh">
+          <property name="text">
+           <string>High</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbPriorityHighest">
+          <property name="text">
+           <string>Highest</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Options</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_9">
+      <item>
+       <widget class="QCheckBox" name="cbInterruptOnStop">
+        <property name="text">
+         <string>Interrupt track on stop</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbPlayOnce">
+        <property name="text">
+         <string>Play once</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="cbCanPan">
+        <property name="text">
+         <string>Can pan</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Properties</string>
+     </property>
+     <layout class="QFormLayout" name="formLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Sphere radious:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="leSphereRadious">
+        <property name="text">
+         <string>10</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Min elapsed time:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="leMinElapsedTime">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Max elapsed time:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLineEdit" name="leMaxElapsedTime">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Min volume distance:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QLineEdit" name="leMinVolumeDistance">
+        <property name="text">
+         <string>10</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Max volume distance:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QLineEdit" name="leMaxVolumeDistance">
+        <property name="text">
+         <string>50</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="label_6">
+        <property name="text">
+         <string>Min occlusion:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QLineEdit" name="leMinOcclusion">
+        <property name="text">
+         <string>0</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Treshold:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="1">
+       <widget class="QLineEdit" name="leTreshold">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/soundWizard/soundpage4.cpp
===================================================================
--- s10k/Vago/soundWizard/soundpage4.cpp	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage4.cpp	(revision 1092)
@@ -0,0 +1,48 @@
+#include "soundpage4.h"
+#include "ui_soundpage4.h"
+
+SoundPage4::SoundPage4(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::soundpage4)
+{
+    ui->setupUi(this);
+
+    //Register fields to be accessible in another pages
+    registerField("leVolume", ui->leVolume);
+    registerField("leMinVolume", ui->leMinVolume);
+    registerField("leMaxVolume", ui->leMaxVolume);
+    registerField("lePitch", ui->lePitch);
+    registerField("leMinPitch", ui->leMinPitch);
+    registerField("leMaxPitch", ui->leMaxPitch);
+    registerField("leWeight", ui->leWeight);
+
+    registerField("cbPreventRepeat", ui->cbPreventRepeat);
+
+    registerField("rbStereo22", ui->rbStereo22);
+    registerField("rbMono22", ui->rbMono22);
+    registerField("rbMono44Pc", ui->rbMono44Pc);
+}
+
+bool SoundPage4::validatePage(){
+    QStringList leContents;
+    leContents << ui->leVolume->text() << ui->leMinVolume->text() << ui->leMaxVolume->text()
+               << ui->lePitch->text() << ui->leMinPitch->text() << ui->leMaxPitch->text()
+               << ui->leWeight->text();
+
+    if(Util::checkEmptySpaces(leContents)){
+        Util::showErrorPopUp("Please fill all fields first!");
+        return false;
+    }
+
+    if(Util::checkIfDoubles(leContents)){
+        Util::showErrorPopUp("All fields must contains numbers!");
+        return false;
+    }
+
+    return true;
+}
+
+SoundPage4::~SoundPage4()
+{
+    delete ui;
+}
Index: s10k/Vago/soundWizard/soundpage4.h
===================================================================
--- s10k/Vago/soundWizard/soundpage4.h	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage4.h	(revision 1092)
@@ -0,0 +1,26 @@
+#ifndef SOUNDPAGE4_H
+#define SOUNDPAGE4_H
+
+#include <QWizardPage>
+
+#include "util.h"
+
+namespace Ui {
+class soundpage4;
+}
+
+class SoundPage4 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit SoundPage4(QWidget *parent = 0);
+    ~SoundPage4();
+    
+private:
+    Ui::soundpage4 *ui;
+
+    bool validatePage();
+};
+
+#endif // SOUNDPAGE4_H
Index: s10k/Vago/soundWizard/soundpage4.ui
===================================================================
--- s10k/Vago/soundWizard/soundpage4.ui	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage4.ui	(revision 1092)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>soundpage4</class>
+ <widget class="QWizardPage" name="soundpage4">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <property name="title">
+   <string>OSBD.grp file properties</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Properties</string>
+     </property>
+     <layout class="QFormLayout" name="formLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Volume:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="leVolume">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Min volume:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="leMinVolume">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Max volume:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLineEdit" name="leMaxVolume">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Pitch:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QLineEdit" name="lePitch">
+        <property name="text">
+         <string>0</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Min pitch:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QLineEdit" name="leMinPitch">
+        <property name="text">
+         <string>0</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="label_6">
+        <property name="text">
+         <string>Max pitch:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QLineEdit" name="leMaxPitch">
+        <property name="text">
+         <string>0</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Weight:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="1">
+       <widget class="QLineEdit" name="leWeight">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="7" column="0" colspan="2">
+       <widget class="QCheckBox" name="cbPreventRepeat">
+        <property name="toolTip">
+         <string>This flag forces the engine to always play a different sound</string>
+        </property>
+        <property name="text">
+         <string>Prevent repeat</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Audio Channels</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QRadioButton" name="rbStereo22">
+        <property name="text">
+         <string>Stereo - 22.05 kHz</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="rbMono22">
+        <property name="text">
+         <string>Mono - 22.05 kHz</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="rbMono44Pc">
+        <property name="text">
+         <string>Mono - 44.10 kHz (PC only)</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/soundWizard/soundpage5.cpp
===================================================================
--- s10k/Vago/soundWizard/soundpage5.cpp	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage5.cpp	(revision 1092)
@@ -0,0 +1,47 @@
+#include "soundpage5.h"
+#include "ui_soundpage5.h"
+
+SoundPage5::SoundPage5(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::soundpage5)
+{
+    ui->setupUi(this);
+
+    //Register fields to be accessible in another pages
+    registerField("rbPriorityLowImp", ui->rbPriorityLow);
+    registerField("rbPriorityNormalImp", ui->rbPriorityNormal);
+    registerField("rbPriorityHighImp", ui->rbPriorityHigh);
+    registerField("rbPriorityHighestImp", ui->rbPriorityHighest);
+
+    registerField("leMinVolumeDistanceImp", ui->leMinVolumeDistance);
+    registerField("leMaxVolumeDistanceImp", ui->leMaxVolumeDistance);
+    registerField("leMinAngleImp", ui->leMinAngle);
+    registerField("leMaxAngleImp", ui->leMaxAngle);
+    registerField("leMinAttenuationImp", ui->leMinAttenuation);
+    registerField("leImpactVelocityImp", ui->leImpactVelocity);
+    registerField("leMinOcclusionImp", ui->leMinOcclusion);
+}
+
+bool SoundPage5::validatePage(){
+    QStringList leContents;
+    leContents << ui->leMinVolumeDistance->text() << ui->leMaxVolumeDistance->text() <<
+                  ui->leMinAngle->text() << ui->leMaxAngle->text() << ui->leMinAttenuation->text() <<
+                  ui->leImpactVelocity->text() << ui->leMinOcclusion->text();
+
+    if(Util::checkEmptySpaces(leContents)){
+        Util::showErrorPopUp("Please fill all fields first!");
+        return false;
+    }
+
+    if(Util::checkIfDoubles(leContents)){
+        Util::showErrorPopUp("All fields must contains numbers!");
+        return false;
+    }
+
+    return true;
+}
+
+SoundPage5::~SoundPage5()
+{
+    delete ui;
+}
Index: s10k/Vago/soundWizard/soundpage5.h
===================================================================
--- s10k/Vago/soundWizard/soundpage5.h	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage5.h	(revision 1092)
@@ -0,0 +1,26 @@
+#ifndef SOUNDPAGE5_H
+#define SOUNDPAGE5_H
+
+#include <QWizardPage>
+
+#include "util.h"
+
+namespace Ui {
+class soundpage5;
+}
+
+class SoundPage5 : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit SoundPage5(QWidget *parent = 0);
+    ~SoundPage5();
+    
+private:
+    Ui::soundpage5 *ui;
+
+    bool validatePage();
+};
+
+#endif // SOUNDPAGE5_H
Index: s10k/Vago/soundWizard/soundpage5.ui
===================================================================
--- s10k/Vago/soundWizard/soundpage5.ui	(revision 1092)
+++ s10k/Vago/soundWizard/soundpage5.ui	(revision 1092)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>soundpage5</class>
+ <widget class="QWizardPage" name="soundpage5">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>478</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <property name="title">
+   <string>OSBD.imp file properties</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Sound priority</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QRadioButton" name="rbPriorityLow">
+          <property name="text">
+           <string>Low</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbPriorityNormal">
+          <property name="text">
+           <string>Normal</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbPriorityHigh">
+          <property name="text">
+           <string>High</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbPriorityHighest">
+          <property name="text">
+           <string>Highest</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Properties</string>
+     </property>
+     <layout class="QFormLayout" name="formLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Min volume distance:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="leMinVolumeDistance">
+        <property name="text">
+         <string>15</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Max volume distance:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="leMaxVolumeDistance">
+        <property name="text">
+         <string>80</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Min angle:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLineEdit" name="leMinAngle">
+        <property name="text">
+         <string>360</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Max angle:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QLineEdit" name="leMaxAngle">
+        <property name="text">
+         <string>360</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Min attenuation:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QLineEdit" name="leMinAttenuation">
+        <property name="text">
+         <string>1</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="label_6">
+        <property name="text">
+         <string>Impact velocity:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QLineEdit" name="leImpactVelocity">
+        <property name="text">
+         <string>0</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Min occlusion:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="1">
+       <widget class="QLineEdit" name="leMinOcclusion">
+        <property name="text">
+         <string>0</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/soundWizard/soundpagefinal.cpp
===================================================================
--- s10k/Vago/soundWizard/soundpagefinal.cpp	(revision 1092)
+++ s10k/Vago/soundWizard/soundpagefinal.cpp	(revision 1092)
@@ -0,0 +1,301 @@
+#include "soundpagefinal.h"
+#include "ui_soundpagefinal.h"
+
+SoundPageFinal::SoundPageFinal(QString AppDir, QString soundsLocation, DropTableWidget *page2Table, Logger *myLogger, QHash<QString, QString> *commandMap, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::soundpagefinal)
+{
+    ui->setupUi(this);
+    this->soundsLocation=soundsLocation;
+    this->page2Table=page2Table;
+    this->myLogger=myLogger;
+    this->commandMap=commandMap;
+
+    this->xmlCommands = new QStringList();
+    this->oniSplitCommands = new QStringList();
+    this->myXmlProcessor = new XmlProcessor(AppDir, this->myLogger,this->xmlCommands);
+    this->myConverter = new Converter(AppDir, this->myLogger,this->oniSplitCommands);
+
+    ui->lbComplete->setText("<html>The wizard is now complete. The sounds have been converted. "
+                            "You can view all converted files clicking <a href=' '>here.</a><br />"
+                            "<br />Click restart to create more sounds from the wizard beggining, "
+                            "otherwise click finish.</html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+
+    connectSlots();
+}
+
+void SoundPageFinal::openSoundsFolder(){
+    QString outputFolder;
+
+    if(field("rbOther").toBool()){
+        outputFolder=field("leOtherLocation").toString();
+    }
+    else{
+        outputFolder=this->soundsLocation;
+    }
+
+    QDesktopServices::openUrl(QUrl("file:///"+outputFolder));
+}
+
+void SoundPageFinal::initializePage(){
+    startProcessing();
+}
+
+void SoundPageFinal::startProcessing(){
+    // Sample files names
+    QString ambFile="OSBDsample_file.amb.xml";
+    QString grpFile="OSBDsample_file.grp.xml";
+    QString impFile="OSBDsample_file.imp.xml";
+    QString ambFileLocation=GlobalVars::VagoTemporaryDir+"/"+ambFile;
+    QString grpFileLocation=GlobalVars::VagoTemporaryDir+"/"+grpFile;
+    QString impFileLocation=GlobalVars::VagoTemporaryDir+"/"+impFile;
+
+    // Page 2 variables
+    QString outputFolder;
+
+    // Page 3 variables
+    QString sphereRadious, minElapsedTime, maxElapsedTime, minVolumeDistance,
+            maxVolumeDistance, minOcclusion, treshold, priority;
+    QStringList flags;
+    bool priorityLow = false, priorityNormal = false,
+            priorityHigh = false, priorityHighest = false;
+
+    bool interruptOnStop=false;
+    bool playOnce=false;
+    bool canPan=false;
+
+    // Page 4 variables
+    QString volume, minVolume, maxVolume, pitch, minPitch, weight, maxPitch,
+            numberChannels;
+    bool preventRepeat=false;
+    bool stereo22=false, mono22=false, mono44Pc=false;
+
+    // Page 5 variables
+    QString minVolumeDistanceImp, maxVolumeDistanceImp, minAngleImp,
+            maxAngleImp, minAttenuationImp, impactVelocityImp,
+            minOcclusionImp, priorityImp;
+    bool priorityLowImp = false, priorityNormalImp = false,
+            priorityHighImp = false, priorityHighestImp = false;
+
+    // Create temp folder if it doesn't exist
+    if(!QDir(GlobalVars::VagoTemporaryDir).exists()){
+        QDir().mkdir(GlobalVars::VagoTemporaryDir);
+    }
+
+    // Get data page 2
+    if(field("rbOther").toBool()){
+        outputFolder=field("leOtherLocation").toString();
+    }
+    else{
+        outputFolder=this->soundsLocation;
+    }
+
+    // Get data page 3
+
+    priorityLow=field("rbPriorityLow").toBool();
+    priorityNormal=field("rbPriorityNormal").toBool();
+    priorityHigh=field("rbPriorityHigh").toBool();
+    priorityHighest=field("rbPriorityHighest").toBool();
+    interruptOnStop=field("cbInterruptOnStop").toBool();
+    playOnce=field("cbPlayOnce").toBool();
+    canPan=field("cbCanPan").toBool();
+
+    if(priorityNormal){
+        priority="Normal";
+    }
+    else if(priorityLow){
+        priority="Low";
+    }
+    else if(priorityHigh){
+        priority="High";
+    }
+    else if(priorityHighest){
+        priority="Highest";
+    }
+
+    if(interruptOnStop){
+        flags << "InterruptTracksOnStop";
+    }
+
+    if(playOnce){
+        flags << "PlayOnce";
+    }
+
+    if(canPan){
+        flags << "CanPan";
+    }
+
+    sphereRadious=Util::normalizeDecimalSeparator(field("leSphereRadious").toString());
+    minElapsedTime=Util::normalizeDecimalSeparator(field("leMinElapsedTime").toString());
+    maxElapsedTime=Util::normalizeDecimalSeparator(field("leMaxElapsedTime").toString());
+    minVolumeDistance=Util::normalizeDecimalSeparator(field("leMinVolumeDistance").toString());
+    maxVolumeDistance=Util::normalizeDecimalSeparator(field("leMaxVolumeDistance").toString());
+    minOcclusion=Util::normalizeDecimalSeparator(field("leMinOcclusion").toString());
+    treshold=Util::normalizeDecimalSeparator(field("leTreshold").toString());
+
+    // Get data page 4
+
+    volume=Util::normalizeDecimalSeparator(field("leVolume").toString());
+    minVolume=Util::normalizeDecimalSeparator(field("leMinVolume").toString());
+    maxVolume=Util::normalizeDecimalSeparator(field("leMaxVolume").toString());
+    pitch=Util::normalizeDecimalSeparator(field("lePitch").toString());
+    minPitch=Util::normalizeDecimalSeparator(field("leMinPitch").toString());
+    maxPitch=Util::normalizeDecimalSeparator(field("leMaxPitch").toString());
+    weight=Util::normalizeDecimalSeparator(field("leWeight").toString());
+
+    preventRepeat=field("cbPreventRepeat").toBool();
+
+    stereo22=field("rbStereo22").toBool();
+    mono22=field("rbMono22").toBool();
+    mono44Pc=field("rbMono44Pc").toBool();
+
+    if(stereo22 || mono44Pc){
+        numberChannels="2";
+    }
+    else if(mono22){
+        numberChannels="1";
+    }
+
+    // Get data page 5
+    priorityLowImp=field("rbPriorityLowImp").toBool();
+    priorityNormalImp=field("rbPriorityNormalImp").toBool();
+    priorityHighImp=field("rbPriorityHighImp").toBool();
+    priorityHighestImp=field("rbPriorityHighestImp").toBool();
+
+    if(priorityNormalImp){
+        priorityImp="Normal";
+    }
+    else if(priorityLowImp){
+        priorityImp="Low";
+    }
+    else if(priorityHighImp){
+        priorityImp="High";
+    }
+    else if(priorityHighestImp){
+        priorityImp="Highest";
+    }
+
+    minVolumeDistanceImp=Util::normalizeDecimalSeparator(field("leMinVolumeDistanceImp").toString());
+    maxVolumeDistanceImp=Util::normalizeDecimalSeparator(field("leMaxVolumeDistanceImp").toString());
+    minAngleImp=Util::normalizeDecimalSeparator(field("leMinAngleImp").toString());
+    maxAngleImp=Util::normalizeDecimalSeparator(field("leMaxAngleImp").toString());
+    minAttenuationImp=Util::normalizeDecimalSeparator(field("leMinAttenuationImp").toString());
+    impactVelocityImp=Util::normalizeDecimalSeparator(field("leImpactVelocityImp").toString());
+    minOcclusionImp=Util::normalizeDecimalSeparator(field("leMinOcclusionImp").toString());
+
+    //######################################################### Starting xml processing
+
+    // Clean tmp dir
+    if(!Util::rmDir(GlobalVars::VagoTemporaryDir)){        
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't clean vago temp dir for complete sound wizard. Aborting.\n"+GlobalVars::VagoTemporaryDir);
+        return;
+    }
+
+    if(!QDir(QDir::tempPath()).mkpath("VagoTemp")){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't reconstruct vago temp dir for complete sound wizard. Aborting.\n"+GlobalVars::VagoTemporaryDir);
+    }
+
+    // Copy sample xml files to tmp dir
+    QFile::copy(":/new/sampleFiles/"+ambFile , ambFileLocation);
+    QFile::copy(":/new/sampleFiles/"+grpFile , grpFileLocation);
+    QFile::copy(":/new/sampleFiles/"+impFile , impFileLocation);
+    QFile::setPermissions(ambFileLocation, QFile::ReadOwner | QFile::WriteOwner); //remove read only attribute that come from resources
+    QFile::setPermissions(grpFileLocation, QFile::ReadOwner | QFile::WriteOwner);
+    QFile::setPermissions(impFileLocation, QFile::ReadOwner | QFile::WriteOwner);
+
+    (*this->xmlCommands)
+     << "--replace-all-values -e Priority -n "+Util::insertQuotes(priority)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e Flags -n "+(flags.join(" ").isEmpty() ? Util::insertQuotes("") : Util::insertQuotes(flags.join(" ")))+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e SphereRadius -n "+Util::insertQuotes(sphereRadious)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e Treshold -n "+Util::insertQuotes(treshold)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e MinOcclusion -n "+Util::insertQuotes(minOcclusion)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name ElapsedTime -e  Max -n "+Util::insertQuotes(maxElapsedTime)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name ElapsedTime -e  Min -n "+Util::insertQuotes(minElapsedTime)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Distance -e  Max -n "+Util::insertQuotes(maxVolumeDistance)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Distance -e  Min -n "+Util::insertQuotes(minVolumeDistance)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name SoundGroup -e  Volume -n "+Util::insertQuotes(volume)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name SoundGroup -e  Pitch -n "+Util::insertQuotes(pitch)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name SoundGroup -e  NumberOfChannels -n "+Util::insertQuotes(numberChannels)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Volume -e  Min -n "+Util::insertQuotes(minVolume)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Volume -e  Max -n "+Util::insertQuotes(maxVolume)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Pitch -e  Min -n "+Util::insertQuotes(minPitch)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Pitch -e  Max -n "+Util::insertQuotes(maxPitch)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e  Weight -n "+Util::insertQuotes(weight)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e  Priority -n "+Util::insertQuotes(priorityImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Distance -e  Min -n "+Util::insertQuotes(minVolumeDistanceImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Distance -e  Max -n "+Util::insertQuotes(maxVolumeDistanceImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Angle -e  Min -n "+Util::insertQuotes(minAngleImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values --parent-element-name Angle -e  Max -n "+Util::insertQuotes(maxAngleImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e  MinAttenuation -n "+Util::insertQuotes(minAttenuationImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e  ImpactVelocity -n "+Util::insertQuotes(impactVelocityImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
+     << "--replace-all-values -e  MinOcclusion -n "+Util::insertQuotes(minOcclusionImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose";
+
+    if(preventRepeat){
+        (*this->xmlCommands) << "--replace-all-values --parent-element-name SoundGroup -e Flags -n PreventRepeat -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose";
+    }
+
+    myXmlProcessor->start();
+    myXmlProcessor->wait(); // Wait until all xml is edited
+
+    QString currFileName;
+    QString currGrpFileLocation;
+    QString currAmbFileLocation;
+    QString currImpFileLocation;
+
+    for(int i=0; i<this->page2Table->rowCount(); i++){
+
+        (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(this->page2Table->item(i,1)->text()); // add location of sound file to convert
+
+        currFileName=this->page2Table->item(i,0)->text(); // get current file name
+        currAmbFileLocation = outputFolder + "/" + QString(ambFile).replace("sample_file",currFileName); // get the new files, filenames
+        currGrpFileLocation = outputFolder + "/" + QString(grpFile).replace("sample_file",currFileName);
+        currImpFileLocation = outputFolder + "/" + QString(impFile).replace("sample_file",currFileName);
+
+        QFile::copy(ambFileLocation, currAmbFileLocation); // make a copy of the sample files that will be the real files
+        QFile::copy(grpFileLocation, currGrpFileLocation);
+        QFile::copy(impFileLocation, currImpFileLocation);
+
+        (*this->xmlCommands) << "--replace-all-values -e BaseTrack1 -n "+Util::insertQuotes(currFileName)+" -f "+Util::insertQuotes(currAmbFileLocation)+" --no-backups --no-verbose" // process the xml
+                             << "--replace-all-values -e Sound -n "+Util::insertQuotes(currFileName)+" -f "+Util::insertQuotes(currGrpFileLocation)+" --no-backups --no-verbose"
+                             << "--replace-all-values -e Group -n "+Util::insertQuotes(currFileName)+" -f "+Util::insertQuotes(currImpFileLocation)+" --no-backups --no-verbose";
+
+        myXmlProcessor->start();
+        myXmlProcessor->wait(); // Wait until all xml is edited
+
+        (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(currAmbFileLocation);
+        (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(currGrpFileLocation);
+        (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(currImpFileLocation);
+    }
+
+    this->myConverter->start(); // finally process the onisplit commands
+    this->myConverter->wait(); // wait for it to complete
+}
+
+void SoundPageFinal::catchXmlAndOSplitProcessingError(QString result, int numErrors){
+
+    if(numErrors!=0){
+        QString sNumErrors=QString::number(numErrors);
+        if(numErrors>1){
+            UtilVago::showErrorPopUpLogButton(result+"\n This is the last of " + sNumErrors + " errors.");
+        }
+        else{
+            UtilVago::showErrorPopUpLogButton(result);
+        }
+    }
+}
+
+void SoundPageFinal::connectSlots(){
+    //This signal is for thread that is working setup the progress bar (make it visible and set it's min-max)
+    connect(this->myXmlProcessor, SIGNAL(resultConversion(QString, int)), this, SLOT(catchXmlAndOSplitProcessingError(QString, int)));
+    connect(this->myConverter, SIGNAL(resultConversion(QString, int)), this, SLOT(catchXmlAndOSplitProcessingError(QString, int)));
+    connect(ui->lbComplete, SIGNAL(linkActivated(const QString & )), this, SLOT(openSoundsFolder()));
+}
+
+SoundPageFinal::~SoundPageFinal()
+{
+    delete this->xmlCommands;
+    delete this->oniSplitCommands;
+    delete this->myXmlProcessor;
+    delete this->myConverter;
+    delete ui;
+}
Index: s10k/Vago/soundWizard/soundpagefinal.h
===================================================================
--- s10k/Vago/soundWizard/soundpagefinal.h	(revision 1092)
+++ s10k/Vago/soundWizard/soundpagefinal.h	(revision 1092)
@@ -0,0 +1,45 @@
+#ifndef SOUNDPAGEFINAL_H
+#define SOUNDPAGEFINAL_H
+
+#include <QWizardPage>
+#include <QDesktopServices>
+#include <QUrl>
+#include <droptablewidget.h>
+
+#include "logger.h"
+#include "xmlprocessor.h"
+#include "converter.h"
+
+namespace Ui {
+class soundpagefinal;
+}
+
+class SoundPageFinal : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit SoundPageFinal(QString AppDir, QString soundsLocation, DropTableWidget *page2Table, Logger *myLogger, QHash<QString, QString> *commandMap, QWidget *parent = 0);
+    ~SoundPageFinal();
+    
+private:
+    QString soundsLocation;
+    Ui::soundpagefinal *ui;
+    DropTableWidget *page2Table;
+    Logger *myLogger;
+    XmlProcessor *myXmlProcessor;
+    Converter *myConverter;
+    QStringList *xmlCommands;
+    QStringList *oniSplitCommands;
+    QHash<QString, QString> *commandMap;
+
+    void initializePage();
+    void startProcessing();
+    void connectSlots();
+
+private slots:
+    void openSoundsFolder();
+    void catchXmlAndOSplitProcessingError(QString result, int numErrors);
+};
+
+#endif // SOUNDPAGEFINAL_H
Index: s10k/Vago/soundWizard/soundpagefinal.ui
===================================================================
--- s10k/Vago/soundWizard/soundpagefinal.ui	(revision 1092)
+++ s10k/Vago/soundWizard/soundpagefinal.ui	(revision 1092)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>soundpagefinal</class>
+ <widget class="QWizardPage" name="soundpagefinal">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="lbComplete">
+     <property name="text">
+      <string>The wizard is now complete. Edit this text in soundpagefinal.cpp</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>30</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/soundWizard/soundwizard.cpp
===================================================================
--- s10k/Vago/soundWizard/soundwizard.cpp	(revision 1092)
+++ s10k/Vago/soundWizard/soundwizard.cpp	(revision 1092)
@@ -0,0 +1,40 @@
+#include "soundwizard.h"
+
+SoundWizard::SoundWizard(QString appDir, QString workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger, QHash<QString, QString> *commandMap)
+    :AbstractWizard(appDir, workspaceWizardLocation, vagoSettings, myLogger, true)
+{
+    this->appDir=appDir;
+    this->soundsLocation=this->workspaceWizardLocation+"/Sounds";
+    this->commandMap=commandMap;
+}
+void SoundWizard::exec(){
+
+    SoundPage2 *page2 = new SoundPage2(this->appDir);
+    SoundPage3 *page3 = new SoundPage3();
+    SoundPage4 *page4 = new SoundPage4();
+    SoundPage5 *page5 = new SoundPage5();
+    SoundPageFinal *pageFinal = new SoundPageFinal(this->appDir, this->soundsLocation,page2->soundTable,this->myLogger, this->commandMap);
+
+    this->myWizard.addPage
+    (
+        createIntroPage
+        (
+            "Welcome to the Oni Sound wizard.\n"
+            "This wizard will allow you to convert in a few and simple steps sounds to oni format."
+        )
+    );
+
+    this->myWizard.addPage(page2);
+    this->myWizard.addPage(page3);
+    this->myWizard.addPage(page4);
+    this->myWizard.addPage(page5);
+    this->myWizard.addPage(pageFinal);
+
+    this->myWizard.setWindowTitle("Sound wizard");
+
+    showWizard("Sound wizard", ":/new/icons/sound.png");
+}
+
+void SoundWizard::beforeClose(QDialog::DialogCode){
+
+}
Index: s10k/Vago/soundWizard/soundwizard.h
===================================================================
--- s10k/Vago/soundWizard/soundwizard.h	(revision 1092)
+++ s10k/Vago/soundWizard/soundwizard.h	(revision 1092)
@@ -0,0 +1,34 @@
+#ifndef SOUNDWIZARD_H
+#define SOUNDWIZARD_H
+
+// System includes
+#include <QString>
+#include <QWizard>
+#include <QWizardPage>
+#include <QLabel>
+#include <QDesktopWidget>
+#include <QVBoxLayout>
+#include <QPushButton>
+
+// Local includes
+#include "util.h"
+#include "abstractwizard.h"
+#include "logger.h"
+#include "soundpage2.h"
+#include "soundpage3.h"
+#include "soundpage4.h"
+#include "soundpage5.h"
+#include "soundpagefinal.h"
+
+class SoundWizard: public AbstractWizard
+{
+protected:
+    SoundWizard(QString appLocation, QString workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger, QHash<QString, QString> *commandMap);
+    void exec();
+    QHash<QString, QString> *commandMap;
+private:
+    QString soundsLocation;
+    void beforeClose(QDialog::DialogCode resultStatus);
+};
+
+#endif // SOUNDWIZARD_H
Index: s10k/Vago/util.cpp
===================================================================
--- s10k/Vago/util.cpp	(revision 1092)
+++ s10k/Vago/util.cpp	(revision 1092)
@@ -0,0 +1,250 @@
+#include "util.h"
+
+namespace Util{
+
+QString normalizePath(QString path){
+    return path.replace("\\","/");
+}
+
+QString cutName(QString path){
+    return path.remove(0,path.lastIndexOf('/')).remove('"');
+}
+
+QString cutNameWithoutBackSlash(QString path){
+    return cutName(path).remove('/');
+}
+
+QString insertQuotes(const QString &currString){
+    return "\""+currString+"\"";
+}
+
+QString normalizeAndQuote(QString path){
+    return insertQuotes(normalizePath(path));
+}
+
+void showPopUp(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+void showRichPopUp(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setTextFormat(Qt::RichText);
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+void showWarningPopUp(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Warning);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+void showErrorPopUp(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Critical);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+void showRichErrorPopUp(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Critical);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+bool showQuestionPopUp(QWidget * parent, QString message, QMessageBox::StandardButton standardButton){
+    return QMessageBox::question (parent, "Are you sure?", message, QMessageBox::Yes | QMessageBox::No, standardButton)==QMessageBox::Yes;
+}
+
+QMessageBox::StandardButton showQuestionPopUpWithCancel(QWidget * parent, QString message, QMessageBox::StandardButton standardButton){
+    return QMessageBox::question (parent, "Are you sure?", message, QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, standardButton);
+}
+
+QStringList multipleDirDialog(QString title){
+    QFileDialog w;
+
+    w.setFileMode(QFileDialog::DirectoryOnly);
+
+    w.setWindowTitle(title);
+
+    QListView *l = w.findChild<QListView*>("listView");
+
+    if (l) {
+        l->setSelectionMode(QAbstractItemView::MultiSelection);
+    }
+
+    QTreeView *t = w.findChild<QTreeView*>();
+
+    if (t) {
+        t->setSelectionMode(QAbstractItemView::MultiSelection);
+    }
+
+    if(w.exec()){ //if accepted
+        return w.selectedFiles();
+    }
+    return QStringList(); //return empty
+}
+
+bool checkEmptySpaces(QStringList toCheck){
+    foreach (QString current, toCheck){
+        if(current.trimmed().isEmpty()){
+            return true; //There are empty spaces
+        }
+    }
+    return false;
+}
+
+bool checkIfIntegers(QStringList toCheck){
+    foreach (QString current, toCheck){
+        if(!isStringInteger(current)){
+            return true; // Some aren't valid integers
+        }
+    }
+    return false;
+}
+
+bool checkIfDoubles(QStringList toCheck){
+    foreach (QString current, toCheck){
+        if(!isStringDouble(current)){
+            return true; // Some aren't valid doubles
+        }
+    }
+    return false;
+}
+
+bool isStringInteger(QString myString){
+    bool isNumber;
+
+    myString.toInt(&isNumber); //convert to int and see if it succeeds
+
+    return isNumber;
+}
+
+bool isStringDouble(QString myString){
+    bool isDouble;
+
+    myString.toDouble(&isDouble); //convert to double and see if it succeeds
+
+    return isDouble;
+}
+
+// Created from scratch
+bool copyDir(const QString &fromPath, QString toPath, const bool isRecursive){
+    QDir fromDir(fromPath);
+    QDir toDir(toPath);
+
+    if(!toDir.mkdir(fromDir.dirName())){ // create the folder in the destination
+        return false;
+    }
+
+    // Update toPath to include the folder from "fromPath"
+    toPath = toPath + "/" + fromDir.dirName();
+    toDir = QDir(toPath);
+
+    for(const QFileInfo &currFileInfo : fromDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)){
+
+        if(currFileInfo.isFile()){
+
+            QFile destFile(toPath + "/" + currFileInfo.fileName());
+
+            if(!QFile::copy(currFileInfo.absoluteFilePath(),toPath + "/" + currFileInfo.fileName())){
+                return false;
+            }
+        }
+        else if(isRecursive && currFileInfo.isDir() && currFileInfo.absoluteFilePath() != fromDir.absolutePath()){
+
+            if(!copyDir(currFileInfo.absoluteFilePath(), toPath, isRecursive)){
+                return false;
+            }
+        }
+    }
+
+    return true;
+}
+
+//Copied from here: http://stackoverflow.com/questions/2536524/copy-directory-using-qt (ty roop)
+bool rmDir(const QString &dirPath)
+{
+    QDir dir(dirPath);
+    if (!dir.exists())
+        return true;
+    foreach(const QFileInfo &info, dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)) {
+        if (info.isDir()) {
+            if (!rmDir(info.filePath()))
+                return false;
+        } else {
+            if (!dir.remove(info.fileName()))
+                return false;
+        }
+    }
+    QDir parentDir(QFileInfo(dirPath).path());
+    return parentDir.rmdir(QFileInfo(dirPath).fileName());
+}
+
+
+QString fullTrim(QString str) {
+
+    str = str.simplified(); //convert all invisible chars in normal whitespaces
+    str.replace( " ", "" );
+
+    return str;
+}
+
+//Searches for the QString "toSearch" in the "myString" variable backward
+//Returns the index of the first match or -1 if not found
+int indexOfBackward(QString myString, QString toSearch, int from){
+    int myStringSize=myString.size();
+    int toSearchSize=toSearch.size();
+
+    if(from==-1){
+        from=myStringSize;
+    }
+
+    int i=from;
+
+    while(i>=0){
+        for(int j=toSearchSize-1; j>=0; j--){
+            i--;
+            if(myString.at(i)!=toSearch.at(j)){
+                break;
+            }
+            if(j==0){
+                return i;
+            }
+        }
+    }
+
+    return -1;
+}
+
+QStringList substring(QString myString,QString separator, Qt::CaseSensitivity cs){
+    QStringList result = QStringList();
+    int currIdx=0, nextIdx=0;
+
+    while(true){
+        nextIdx=myString.indexOf(separator,currIdx,cs);
+        result << myString.mid(currIdx,nextIdx-currIdx);
+        if(nextIdx==-1) break;
+        currIdx=nextIdx+1;
+    }
+
+    return result;
+}
+
+QString normalizeDecimalSeparator(QString value){
+    return value.replace(',','.');
+}
+
+// From here: http://stackoverflow.com/questions/17893328/qt-getting-the-screen-resolution-without-the-extended-monitor ty Chris
+QRect getScreenResolution(){
+    QDesktopWidget widget;
+    return widget.availableGeometry(widget.primaryScreen()); // or screenGeometry(), depending on your needs
+}
+
+}
Index: s10k/Vago/util.h
===================================================================
--- s10k/Vago/util.h	(revision 1092)
+++ s10k/Vago/util.h	(revision 1092)
@@ -0,0 +1,60 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <QtGlobal> // for debug macros
+#ifdef QT_DEBUG
+    #include <QDebug>
+#endif
+#include <QString>
+#include <QMessageBox>
+#include <QFileDialog>
+#include <QListView>
+#include <QTreeView>
+#include <QDesktopServices>
+#include <QUrl>
+#include <QCoreApplication>
+#include <QDesktopWidget>
+#include <QSettings>
+#include <QXmlStreamReader>
+#include <memory>
+
+/**
+  Utilities functions (global)
+  **/
+namespace Util{
+QString normalizePath(QString path);
+QString cutName(QString path);
+QString cutNameWithoutBackSlash(QString path);
+QString insertQuotes(const QString &currString);
+QString normalizeAndQuote(QString path);
+QString fullTrim(QString str);
+QString normalizeDecimalSeparator(QString value);
+
+inline const char* qStrToCstr(const QString &currentString){
+    return currentString.toUtf8().constData();
+}
+
+inline const char* boolToCstr(bool currentBoolean){
+    return currentBoolean ? "true" : "false";
+}
+
+QStringList multipleDirDialog(QString title);
+QStringList substring(QString myString,QString separator,Qt::CaseSensitivity cs = Qt::CaseSensitive);
+int indexOfBackward(QString myString, QString toSearch, int from = -1);
+bool showQuestionPopUp(QWidget * parent, QString message, QMessageBox::StandardButton standardButton=QMessageBox::NoButton);
+QMessageBox::StandardButton showQuestionPopUpWithCancel(QWidget * parent, QString message, QMessageBox::StandardButton standardButton=QMessageBox::NoButton);
+bool checkEmptySpaces(QStringList toCheck);
+bool checkIfIntegers(QStringList toCheck);
+bool checkIfDoubles(QStringList toCheck);
+bool isStringInteger(QString myString);
+bool isStringDouble(QString myString);
+bool copyDir(const QString &fromPath, QString toPath, const bool isRecursive = false);
+bool rmDir(const QString &dirPath);
+QRect getScreenResolution();
+void showPopUp(const QString &message);
+void showRichPopUp(const QString &message);
+void showWarningPopUp(const QString &message);
+void showErrorPopUp(const QString &message);
+void showRichErrorPopUp(const QString &message);
+}
+#endif // UTIL_H
Index: s10k/Vago/utilvago.cpp
===================================================================
--- s10k/Vago/utilvago.cpp	(revision 1092)
+++ s10k/Vago/utilvago.cpp	(revision 1092)
@@ -0,0 +1,146 @@
+#include "utilvago.h"
+
+namespace UtilVago{
+
+void openLogFile(){
+    QDesktopServices::openUrl(QUrl("file:///"+getAppPath()+"/"+GlobalVars::AppLogName));
+}
+
+void showAndLogWarningPopUp(Logger *logger, const QString &message){
+    logger->writeString(message);
+
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Warning);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+//Same of above but allow open log file (doesn't write in log file!!)
+void showWarningPopUpLogButton(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Warning);
+    msgBox.setText(message);
+    QPushButton *viewb = msgBox.addButton("View log", QMessageBox::ActionRole);
+    msgBox.setStandardButtons(QMessageBox::Close);
+    msgBox.exec();
+    if(msgBox.clickedButton() == (QAbstractButton*)(viewb)){
+        openLogFile();
+    }
+}
+
+//Same of above but also writtes directly to the log file the error
+void showAndLogWarningPopUpLogButton(Logger *logger, const QString &message){
+
+    logger->writeString(message);
+
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Warning);
+    msgBox.setText(message);
+    QPushButton *viewb = msgBox.addButton("View log", QMessageBox::ActionRole);
+    msgBox.setStandardButtons(QMessageBox::Close);
+    msgBox.exec();
+    if(msgBox.clickedButton() == (QAbstractButton*)(viewb)){
+        openLogFile();
+    }
+}
+
+void showAndLogErrorPopUp(Logger *logger, const QString &message){
+
+    logger->writeString(message);
+
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Critical);
+    msgBox.setText(message);
+    msgBox.exec();
+}
+
+//Same of above but allow open log file (doesn't write in log file!!)
+void showErrorPopUpLogButton(const QString &message){
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Critical);
+    msgBox.setText(message);
+    QPushButton *viewb = msgBox.addButton("View log", QMessageBox::ActionRole);
+    msgBox.setStandardButtons(QMessageBox::Close);
+    msgBox.exec();
+    if(msgBox.clickedButton() == (QAbstractButton*)(viewb)){
+        openLogFile();
+    }
+}
+
+//Same of above but also writtes directly to the log file the error
+void showAndLogErrorPopUpLogButton(Logger *logger, const QString &message){
+
+    logger->writeString(message);
+
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Critical);
+    msgBox.setText(message);
+    QPushButton *viewb = msgBox.addButton("View log", QMessageBox::ActionRole);
+    msgBox.setStandardButtons(QMessageBox::Close);
+    msgBox.exec();
+    if(msgBox.clickedButton() == (QAbstractButton*)(viewb)){
+        openLogFile();
+    }
+}
+
+/**
+  Gets application directory. In mac os gets the .app directory
+  **/
+QString getOSIndependentAppPath(){
+#ifdef Q_OS_MAC
+    QDir dir = QDir(QCoreApplication::applicationDirPath());
+    if(dir.absolutePath().contains(".app")){ // include bundle, but we don't want it
+        dir.cdUp();
+        dir.cdUp();
+        dir.cdUp();
+    }
+    return dir.absolutePath();
+#else
+    return  QDir::currentPath();
+#endif
+}
+
+QString getAppPath(){
+    return getOSIndependentAppPath();
+}
+
+// Absolute paths
+QString getOniSplitExecutableAbsolutePath(){
+    return getAppPath() + "/" + GlobalVars::ToolsFolder + "/" + GlobalVars::OniSplitString;
+}
+
+QString getXmlToolsExecutableAbsolutePath(){
+    return getAppPath() + "/" + GlobalVars::ToolsFolder + "/" + GlobalVars::XmlToolsString;
+}
+
+// Executables (includes mono if necessary)
+QString getOniSplitExecutable(){
+
+#ifdef Q_OS_MAC
+    return getMonoExecutablePath() + " " + Util::insertQuotes(getOniSplitExecutableAbsolutePath());
+#else
+    return Util::insertQuotes(getOniSplitExecutableAbsolutePath());
+#endif
+}
+
+QString getXmlToolsExecutable(){
+    return Util::insertQuotes(getXmlToolsExecutableAbsolutePath());
+}
+
+#ifdef Q_OS_MAC
+QString getMonoExecutablePath(){
+
+    // Only way that I found to get mono working in 10.11
+    QString possibleMonoDir = "/usr/local/bin/mono";
+    QFileInfo checkFile(possibleMonoDir);
+
+    if (checkFile.exists() && checkFile.isFile()) {
+        return possibleMonoDir;
+    } else {
+        return "mono";
+    }
+
+}
+#endif
+
+}
Index: s10k/Vago/utilvago.h
===================================================================
--- s10k/Vago/utilvago.h	(revision 1092)
+++ s10k/Vago/utilvago.h	(revision 1092)
@@ -0,0 +1,65 @@
+#ifndef UTILVAGO_H
+#define UTILVAGO_H
+
+#include "util.h"
+#include "logger.h"
+
+namespace GlobalVars{
+
+const QString AppVersion="1.3";
+const QString LastCompatibleVersion = "1.0";
+const QString ToolsFolder = "tools";
+const QString OniSplitString="OniSplit.exe";
+#ifdef Q_OS_WIN
+const QString XmlToolsString="XmlTools.exe";
+#else
+const QString XmlToolsString="XmlTools";
+#endif
+
+#ifdef Q_OS_WIN
+const QString OniExe="Oni.exe";
+#else
+const QString OniExe="Oni.app/Contents/MacOS/Oni";
+#endif
+
+const QString AppLogName="logVago.txt";
+const QString BuiltOniSplitVersion="0.9.96.0";
+const QString BuiltXmlToolsVersion="2.0c";
+const QString ModsDomain="mods.oni2.net";
+#ifdef Q_OS_WIN
+const QString VagoNode = "247";
+#else
+const QString VagoNode = "277";
+#endif
+const QString VagoCheckUpdatesUrl="http://"+ModsDomain+"/?q=api/node/"+VagoNode+".json";
+const QString VagoWebUrl="http://"+ModsDomain+"/node/"+VagoNode;
+const QString VagoTemporaryDir=QDir::tempPath()+"/VagoTemp";
+const QString HelpDir="help";
+const int DefaultWindowWidth=800;
+const int DefaultWindowHeight=600;
+const char OniSplitProcSeparator=';';
+}
+
+/**
+  Utilities functions (Vago specific)
+  **/
+namespace UtilVago{
+void openLogFile();
+void showAndLogWarningPopUp(Logger *logger, const QString &message);
+void showWarningPopUpLogButton(const QString &message);
+void showAndLogWarningPopUpLogButton(Logger *logger, const QString &message);
+void showAndLogErrorPopUp(Logger *logger, const QString &message);
+void showErrorPopUpLogButton(const QString &message);
+void showAndLogErrorPopUpLogButton(Logger *logger, const QString &message);
+QString getOSIndependentAppPath();
+QString getAppPath();
+QString getOniSplitExecutableAbsolutePath();
+QString getXmlToolsExecutableAbsolutePath();
+QString getOniSplitExecutable();
+QString getXmlToolsExecutable();
+#ifdef Q_OS_MAC
+QString getMonoExecutablePath();
+#endif
+}
+
+#endif // UTILVAGO_H
Index: s10k/Vago/windowMessagesWizard/wmfinalpage.cpp
===================================================================
--- s10k/Vago/windowMessagesWizard/wmfinalpage.cpp	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmfinalpage.cpp	(revision 1092)
@@ -0,0 +1,259 @@
+#include "wmfinalpage.h"
+#include "ui_wmfinalpage.h"
+
+WmFinalPage::WmFinalPage(QString AppDir, QString wmLocation, Logger *myLogger, QList<std::shared_ptr<WmPage> > &pages, QWidget *parent) :
+    QWizardPage(parent), ui(new Ui::wmfinalpage), pages(pages)
+{
+    ui->setupUi(this);
+    this->wmLocation=wmLocation;
+    this->myLogger=myLogger;
+
+    this->oniSplitCommands = new QStringList();
+    this->myConverter = new Converter(AppDir, this->myLogger,this->oniSplitCommands);
+
+    ui->lbComplete->setText("<html>The wizard is now complete. The window messages have been converted. "
+                            "You can view all converted files clicking <a href=' '>here.</a><br />"
+                            "<br />Click restart to create more window messages from the wizard beggining, "
+                            "otherwise click finish.</html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
+
+    connectSlots();
+}
+
+void WmFinalPage::openSoundsFolder(){
+    QDesktopServices::openUrl(QUrl("file:///"+this->wmLocation));
+}
+
+void WmFinalPage::initializePage(){
+    startProcessing();
+}
+
+void WmFinalPage::startProcessing(){
+    // Check if images folder exists and create it if necessary
+    QDir saveDir(this->wmLocation);
+
+    if(!saveDir.exists())
+    {
+        saveDir.mkpath("."); // http://stackoverflow.com/questions/2241808/checking-if-a-folder-exists-and-creating-folders-in-qt-c thanks Petrucio
+    }
+
+    QString filePath = this->wmLocation + "/" + field("leFileName").toString() + ".xml";
+
+    int globalSectionCounter = -1;
+    int currentIGPGId = globalSectionCounter;
+    int currentIGSAId = globalSectionCounter;
+    int currentIGSTId = globalSectionCounter;
+
+    pugi::xml_document doc;
+
+    pugi::xml_node rootNode = doc.append_child("Oni");
+    pugi::xml_node typeNode;
+
+    // Define type node
+    switch(static_cast<WINDOW_TYPE>(field("cbWindowType").toInt())){
+    case WINDOW_TYPE::OBJECTIVE:
+    {
+        typeNode = rootNode.append_child("OPge");
+        typeNode.append_attribute("id").set_value(++globalSectionCounter);
+        typeNode.append_child("LevelNumber").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(field("leLevelId").toString()));
+        typeNode.append_child("Pages").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(QString("#") + QString::number(++globalSectionCounter)));
+        pugi::xml_node igpaNode = rootNode.append_child("IGPA");
+        igpaNode.append_attribute("id").set_value(globalSectionCounter);
+        pugi::xml_node pagesNode = igpaNode.append_child("Pages");
+        currentIGPGId = globalSectionCounter;
+        for(int i=0; i<this->pages.size(); i++){
+            pagesNode.append_child("Link").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        }
+        break;
+    }
+    case  WINDOW_TYPE::DIARY:
+        typeNode = rootNode.append_child("DPge");
+        typeNode.append_attribute("id").set_value(++globalSectionCounter);
+        typeNode.append_child("LevelNumber").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(field("leLevelId").toString()));
+        typeNode.append_child("PageNumber").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(field("lePageNumber").toString()));
+        typeNode.append_child("IsLearnedMove").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(QString::number(static_cast<int>(field("cbIsLearnedMove").toBool()))));
+        currentIGPGId = globalSectionCounter;
+        typeNode.append_child("Page").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        break;
+    case  WINDOW_TYPE::HELP:
+        typeNode = rootNode.append_child("HPge");
+        typeNode.append_attribute("id").set_value(++globalSectionCounter);
+        currentIGPGId = globalSectionCounter;
+        typeNode.append_child("Page").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        break;
+    case  WINDOW_TYPE::TEXT_CONSOLE:
+    {
+        typeNode = rootNode.append_child("TxtC");
+        typeNode.append_attribute("id").set_value(++globalSectionCounter);
+        typeNode.append_child("Pages").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        pugi::xml_node igpaNode = rootNode.append_child("IGPA");
+        igpaNode.append_attribute("id").set_value(globalSectionCounter);
+        currentIGPGId = globalSectionCounter;
+        pugi::xml_node pagesNode = igpaNode.append_child("Pages");
+        for(int i=0; i<this->pages.size(); i++){
+            pagesNode.append_child("Link").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        }
+        break;
+    }
+    case  WINDOW_TYPE::WEAPON:
+        typeNode = rootNode.append_child("WPge");
+        typeNode.append_attribute("id").set_value(++globalSectionCounter);
+        typeNode.append_child("WeaponClass").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(field("leWeaponClassName").toString()));
+        currentIGPGId = globalSectionCounter;
+        typeNode.append_child("Page").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        break;
+    case  WINDOW_TYPE::ITEM:
+        typeNode = rootNode.append_child("IPge");
+        typeNode.append_attribute("id").set_value(++globalSectionCounter);
+        typeNode.append_child("PageNumber").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(field("lePageNumber").toString()));
+        currentIGPGId = globalSectionCounter;
+        typeNode.append_child("Page").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        break;
+    case WINDOW_TYPE::ENUM_END:
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "An error ocurred: WmFinalPage::startProcessing invalid WINDOW_TYPE");
+        break;
+    }
+
+    // Write pages text
+    for(int i=0; i<this->pages.size(); i++){
+
+        QTextEdit &mainText = this->pages[i]->getMainText();
+        int mainTextNumberOfRows = mainText.toPlainText().split("\n").size();
+
+        QTextEdit &footerText = this->pages[i]->getFooterText();
+        int footerTextNumberOfRows = footerText.toPlainText().split("\n").size();
+
+        // Create TXMP image if exists
+        QString imageLocation = this->pages[i]->getMiddleImage().toolTip();
+        QString imageTXMPName;
+
+        if(!imageLocation.isEmpty()){
+
+            imageTXMPName = "TXMP" + QFileInfo(imageLocation).baseName();
+
+            this->oniSplitCommands->clear();
+            this->oniSplitCommands->append("-create:txmp " + Util::insertQuotes(this->wmLocation) + " -format:bgr32 " + Util::insertQuotes(imageLocation));
+
+            this->myConverter->start(); // finally process the onisplit commands
+            this->myConverter->wait(); // wait for it to complete
+        }
+
+        // IGPG
+        pugi::xml_node igpgNode = rootNode.append_child("IGPG");
+
+        igpgNode.append_attribute("id").set_value(++currentIGPGId);
+
+        pugi::xml_node igpgFontNode = igpgNode.append_child("Font");
+        igpgFontNode.append_child("Family").append_child(pugi::xml_node_type::node_pcdata).set_value("TSFFTahoma");
+        igpgFontNode.append_child("Style").append_child(pugi::xml_node_type::node_pcdata).set_value("Bold");
+        igpgFontNode.append_child("Color").append_child(pugi::xml_node_type::node_pcdata).set_value("255 127 0");
+        igpgFontNode.append_child("Size").append_child(pugi::xml_node_type::node_pcdata).set_value("12");
+        igpgFontNode.append_child("Flags").append_child(pugi::xml_node_type::node_pcdata).set_value("Family Style Color Size");
+
+        currentIGSAId = globalSectionCounter;
+
+        igpgNode.append_child("Image").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(imageTXMPName));
+        igpgNode.append_child("Text1").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        igpgNode.append_child("Text2").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+
+        // IGSA
+
+        ////// Main Text
+        pugi::xml_node igsaMainTextNode = rootNode.append_child("IGSA");
+        igsaMainTextNode.append_attribute("id").set_value(++currentIGSAId);
+        pugi::xml_node igsaMainTextStringsNode = igsaMainTextNode.append_child("Strings");
+
+        currentIGSTId = globalSectionCounter;
+
+        for(int i=0; i<mainTextNumberOfRows; i++){
+            igsaMainTextStringsNode.append_child("Link").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        }
+
+        ////// Footer
+        pugi::xml_node igsaFooterTextNode = rootNode.append_child("IGSA");
+        igsaFooterTextNode.append_attribute("id").set_value(++currentIGSAId);
+        pugi::xml_node igsaFooterTextStringsNode = igsaFooterTextNode.append_child("Strings");
+        for(int i=0; i<footerTextNumberOfRows; i++){
+            igsaFooterTextStringsNode.append_child("Link").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("#" + QString::number(++globalSectionCounter)));
+        }
+
+        // IGSt
+
+        auto setIGStXmlSection = [&rootNode, &currentIGSTId](QTextEdit &currentTextEdit, int numberOfRows){
+
+            for(int i=0; i<numberOfRows; i++){
+
+                QTextCursor currentCursor = currentTextEdit.textCursor();
+                currentCursor.setPosition(currentTextEdit.document()->findBlockByLineNumber(i).position());
+                currentCursor.movePosition(QTextCursor::StartOfLine);
+                currentCursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
+                QTextCharFormat format = currentCursor.charFormat();
+                QString colorRGB =  QString::number(format.foreground().color().red()) + " " +
+                        QString::number(format.foreground().color().green()) + " " +
+                        QString::number(format.foreground().color().blue());
+                QString style = (QString(format.fontItalic() ? "Italic " : "") + (format.fontWeight() == QFont::Bold ? "Bold " : "")).trimmed();
+
+                if(style.isEmpty()){
+                    style = "Normal";
+                }
+
+
+                pugi::xml_node igstMainTextNode = rootNode.append_child("IGSt");
+                igstMainTextNode.append_attribute("id").set_value(++currentIGSTId);
+
+                pugi::xml_node igstMainTextFontNode = igstMainTextNode.append_child("Font");
+                igstMainTextFontNode.append_child("Family").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr("TSFF" + format.font().family()));
+                igstMainTextFontNode.append_child("Style").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(style));
+                igstMainTextFontNode.append_child("Color").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(colorRGB));
+                igstMainTextFontNode.append_child("Size").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(QString::number(format.font().pointSize())));
+                igstMainTextFontNode.append_child("Flags").append_child(pugi::xml_node_type::node_pcdata).set_value("Family Style Color Size");
+
+                igstMainTextNode.append_child("Text").append_child(pugi::xml_node_type::node_pcdata).set_value(Util::qStrToCstr(currentCursor.selection().toPlainText()));
+            }
+
+        };
+
+        //////  Main Text
+        setIGStXmlSection(mainText, mainTextNumberOfRows);
+
+        ////// Footer
+        setIGStXmlSection(footerText, footerTextNumberOfRows);
+    }
+
+    if(!doc.save_file(Util::qStrToCstr(filePath))){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't create " + filePath + " file!");
+        return;
+    }
+
+    // Convert XML file to Oni
+    this->oniSplitCommands->clear();
+    this->oniSplitCommands->append("-create " + Util::insertQuotes(this->wmLocation) + " " +  Util::insertQuotes(filePath));
+
+    this->myConverter->start(); // finally process the onisplit commands
+    this->myConverter->wait(); // wait for it to complete
+}
+
+void WmFinalPage::catchOSplitProcessingErrors(QString result, int numErrors){
+
+    if(numErrors!=0){
+        QString sNumErrors=QString::number(numErrors);
+        if(numErrors>1){
+            UtilVago::showErrorPopUpLogButton(result+"\n This is the last of " + sNumErrors + " errors.");
+        }
+        else{
+            UtilVago::showErrorPopUpLogButton(result);
+        }
+    }
+}
+
+void WmFinalPage::connectSlots(){
+    //This signal is for thread that is working setup the progress bar (make it visible and set it's min-max)
+    connect(this->myConverter, SIGNAL(resultConversion(QString, int)), this, SLOT(catchOSplitProcessingErrors(QString, int)));
+    connect(ui->lbComplete, SIGNAL(linkActivated(const QString & )), this, SLOT(openSoundsFolder()));
+}
+
+WmFinalPage::~WmFinalPage()
+{
+    delete this->oniSplitCommands;
+    delete this->myConverter;
+    delete ui;
+}
Index: s10k/Vago/windowMessagesWizard/wmfinalpage.h
===================================================================
--- s10k/Vago/windowMessagesWizard/wmfinalpage.h	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmfinalpage.h	(revision 1092)
@@ -0,0 +1,48 @@
+#ifndef WMFINALPAGE_H
+#define WMFINALPAGE_H
+
+#include <QWizardPage>
+#include <QDesktopServices>
+#include <QUrl>
+#include <droptablewidget.h>
+#include <pugixml.hpp>
+
+#include "logger.h"
+#include "xmlprocessor.h"
+#include "converter.h"
+#include "wmpage.h"
+#include "wmsetuppage.h"
+
+namespace Ui {
+class wmfinalpage;
+}
+
+class WmFinalPage : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit WmFinalPage(QString AppDir, QString wmLocation, Logger *myLogger, QList<std::shared_ptr<WmPage> > &pages, QWidget *parent = 0);
+    ~WmFinalPage();
+    
+private:
+    QString wmLocation;
+    Ui::wmfinalpage *ui;
+    Logger *myLogger;
+    Converter *myConverter;
+    QStringList *oniSplitCommands;
+    // We use shared_ptr because we need the signal and slot mechanism in WmPage,
+    // which require inheritance from QObject, which doesn't support copy constructors
+    QList<std::shared_ptr<WmPage>> &pages;
+
+private:
+    void initializePage();
+    void startProcessing();
+    void connectSlots();
+
+private slots:
+    void openSoundsFolder();
+    void catchOSplitProcessingErrors(QString result, int numErrors);
+};
+
+#endif // WMFINALPAGE_H
Index: s10k/Vago/windowMessagesWizard/wmfinalpage.ui
===================================================================
--- s10k/Vago/windowMessagesWizard/wmfinalpage.ui	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmfinalpage.ui	(revision 1092)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wmfinalpage</class>
+ <widget class="QWizardPage" name="wmfinalpage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="lbComplete">
+     <property name="text">
+      <string>The wizard is now complete. Edit this text in wmfinalpage.cpp</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>30</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/windowMessagesWizard/wmformatpage.cpp
===================================================================
--- s10k/Vago/windowMessagesWizard/wmformatpage.cpp	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmformatpage.cpp	(revision 1092)
@@ -0,0 +1,342 @@
+#include "wmformatpage.h"
+#include "ui_wmformatpage.h"
+
+WmFormatPage::WmFormatPage(Logger *myLogger, QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::WmFormatPage)
+{
+    ui->setupUi(this);
+
+    this->myLogger = myLogger;
+
+    this->setTitle("Pages Formatting");
+    this->setSubTitle("Create and format the pages here.\nNote that Oni doesn't support partial words formatting so the whole line will be formatted.");
+    setupComboBoxTextSize();
+
+    ui->cbTextSize->setCurrentText("12");
+
+    // Oni only has Tahoma as default, the user however can type any additional font which he has imported into Oni
+    ui->fcbFont->clear();
+    ui->fcbFont->addItem("Tahoma");
+}
+
+void WmFormatPage::initializePage()
+{
+    // Put here code that is dependent from previous pages
+
+    // Clean old pages
+    this->currentPages.clear();
+    ui->twPages->clear();
+
+    addPage();
+
+    setDefaultOniFont(0);
+
+    // If the type is diary page we disable the pages adding and removing
+    // To add extra pages to diary is necessary to create additional files
+    switch(static_cast<WINDOW_TYPE>(field("cbWindowType").toInt())){
+    case WINDOW_TYPE::DIARY:
+    case WINDOW_TYPE::HELP:
+    case WINDOW_TYPE::WEAPON:
+    case WINDOW_TYPE::ITEM:
+        ui->pbAddPageAfter->setEnabled(false);
+        ui->pbAddPageBefore->setEnabled(false);
+        ui->pbDeleteCurrentPage->setEnabled(false);
+        break;
+    case WINDOW_TYPE::OBJECTIVE:
+    case WINDOW_TYPE::TEXT_CONSOLE:
+        ui->pbAddPageAfter->setEnabled(true);
+        ui->pbAddPageBefore->setEnabled(true);
+        ui->pbDeleteCurrentPage->setEnabled(true);
+        break;
+    case WINDOW_TYPE::ENUM_END:
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "An error ocurred: WmFormatPage::initializePage invalid WINDOW_TYPE");
+        break;
+    }
+
+    windowsIsInitialized = true;
+}
+
+WmFormatPage::~WmFormatPage()
+{
+    delete ui;
+}
+
+bool WmFormatPage::validatePage(){
+
+    for(const std::shared_ptr<WmPage> &currentPage : this->currentPages){
+
+        if(
+                currentPage->getMainText().toPlainText().trimmed() == "" &&
+                currentPage->getFooterText().toPlainText().trimmed() == ""
+                )
+        {
+            Util::showErrorPopUp("You need to fill at least one text section in all pages!");
+            return false;
+        }
+
+    }
+
+    // If we can add more than one page, ask the user if he already added them all
+    if(ui->pbAddPageAfter->isEnabled()){
+        return Util::showQuestionPopUp(this, "Have you added all the window pages?");
+    }
+
+    return true;
+
+}
+
+void WmFormatPage::addPage(bool afterCurrentPage){
+
+    int indexForInsertion = 0;
+
+    if(ui->twPages->currentWidget() != nullptr){
+        if(afterCurrentPage){
+            indexForInsertion = ui->twPages->currentIndex() + 1;
+        }
+        else{
+            indexForInsertion = ui->twPages->currentIndex();
+        }
+    }
+
+    ui->twPages->insertTab(indexForInsertion, new QWidget(ui->twPages), "Page " + QString::number(indexForInsertion+1));
+    currentPages.insert(indexForInsertion, std::make_shared<WmPage>(ui->twPages->widget(indexForInsertion)));
+    // Update all other tab texts
+    updateTabNames(indexForInsertion+1);
+
+    // Set the tab added as current tab
+    ui->twPages->setCurrentIndex(indexForInsertion);
+
+    // Set the default font
+    setDefaultOniFont(indexForInsertion);
+    // Make the current selected font the default for new tab
+    setCurrentFormatting(indexForInsertion);
+
+    switch(static_cast<WINDOW_TYPE>(field("cbWindowType").toInt())){
+    case WINDOW_TYPE::HELP:
+    case WINDOW_TYPE::TEXT_CONSOLE:
+        // these types of page doesn't use the footer
+        this->currentPages[indexForInsertion]->hideFooterText();
+        break;
+    case WINDOW_TYPE::DIARY:
+    case WINDOW_TYPE::ITEM:
+    case WINDOW_TYPE::OBJECTIVE:
+    case WINDOW_TYPE::WEAPON:
+        this->currentPages[indexForInsertion]->showFooterText();
+        break;
+    case WINDOW_TYPE::ENUM_END:
+        UtilVago::showAndLogErrorPopUp(this->myLogger, "An error ocurred: WmFormatPage::addPage invalid WINDOW_TYPE");
+        break;
+    }
+
+}
+
+void WmFormatPage::setupComboBoxTextSize(){
+
+    // Setup text size combobox
+    for(int i=8; i<=12; i++){
+        ui->cbTextSize->addItem(QString::number(i));
+    }
+
+    for(int i=14; i<=28; i+=2){
+        ui->cbTextSize->addItem(QString::number(i));
+    }
+
+    ui->cbTextSize->addItem(QString::number(36));
+
+}
+
+void WmFormatPage::on_tbBold_clicked()
+{
+    formatText(FormatType::BOLD);
+}
+
+void WmFormatPage::on_tbItalic_clicked()
+{
+    formatText(FormatType::ITALIC);
+}
+
+void WmFormatPage::on_tbFontColor_clicked()
+{
+    formatText(FormatType::COLOR);
+}
+
+void WmFormatPage::on_fcbFont_currentFontChanged(const QFont&)
+{
+    if(windowsIsInitialized){
+        formatText(FormatType::FONT_TYPE);
+    }
+}
+
+void WmFormatPage::on_cbTextSize_currentTextChanged(const QString&)
+{
+    if(windowsIsInitialized){
+        formatText(FormatType::FONT_SIZE);
+    }
+}
+
+void WmFormatPage::formatText(FormatType desiredFormatType){
+
+    int tabIndex = ui->twPages->currentIndex();
+
+    QVector<QTextEdit*> textEdits;
+
+    if(currentPages[tabIndex]->getMainText().textCursor().hasSelection()){
+        textEdits << &currentPages[tabIndex]->getMainText();
+    }
+    if(currentPages[tabIndex]->getFooterText().textCursor().hasSelection()){
+        textEdits << &currentPages[tabIndex]->getFooterText();
+    }
+
+    if(textEdits.size() == 0){
+        Util::showPopUp("Select some text first.");
+        return;
+    }
+
+    for(QTextEdit* const currentTextEdit : textEdits){
+        QTextCursor currentCursor = currentTextEdit->textCursor();
+
+        // Select entire row(s) (oni only supports formatting the entire row)
+        int selectionStart = currentCursor.selectionStart();
+        int selectionEnd = currentCursor.selectionEnd();
+        int initialRowNumber = 0;
+        int finalRowNumber = 0;
+
+        // If we have no selection skip
+        if(selectionStart == selectionEnd){
+            continue;
+        }
+
+        currentCursor.setPosition(selectionStart);
+        initialRowNumber = currentCursor.blockNumber();
+        currentCursor.setPosition(selectionEnd);
+        finalRowNumber = currentCursor.blockNumber();
+
+        // Apply the style individually for each row (this allow us to apply the same font family to all rows keeping the individual row formatting. e.g. color)
+        for(int i=initialRowNumber; i<=finalRowNumber; i++){
+
+            currentCursor.setPosition(currentTextEdit->document()->findBlockByLineNumber(i).position());
+            currentCursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
+
+            QTextCharFormat format = currentCursor.charFormat();
+
+            if(desiredFormatType == FormatType::BOLD){
+                if(format.fontWeight() == QFont::Bold){
+                    format.setFontWeight(QFont::Normal);
+                }
+                else{
+                    format.setFontWeight(QFont::Bold);
+                }
+            }
+            else if(desiredFormatType == FormatType::ITALIC){
+                if(format.fontItalic()){
+                    format.setFontItalic(false);
+                }
+                else{
+                    format.setFontItalic(true);
+                }
+            }
+            else if(desiredFormatType == FormatType::COLOR){
+                QColor pickedColor = QColorDialog::getColor(Qt::green);
+
+                if(pickedColor.isValid()){
+                    format.setForeground(pickedColor);
+                }
+            }
+            else if(desiredFormatType == FormatType::FONT_TYPE){
+                format.setFontFamily(ui->fcbFont->currentFont().family());
+            }
+            else if(desiredFormatType == FormatType::FONT_SIZE){
+                bool ok;
+                double newFontSize = ui->cbTextSize->currentText().toDouble(&ok);
+
+                if(!ok){
+                    Util::showErrorPopUp("The inputted font size is not valid!");
+                    ui->cbTextSize->setCurrentIndex(0); // reset to default number
+                    return;
+                }
+
+                format.setFontPointSize(static_cast<qreal>(newFontSize));
+            }
+
+            currentCursor.mergeCharFormat(format);
+        }
+    }
+}
+
+
+void WmFormatPage::on_pbAddPageAfter_clicked()
+{
+    addPage(true);
+}
+
+void WmFormatPage::on_pbAddPageBefore_clicked()
+{
+    addPage(false);
+}
+
+void WmFormatPage::on_pbDeleteCurrentPage_clicked()
+{
+    if(ui->twPages->count() <= 1){
+        Util::showErrorPopUp("You must have at least one page!");
+        return;
+    }
+
+    if(Util::showQuestionPopUp(this, "Are you sure do you want to delete the current page?")){
+        int indexToDelete = ui->twPages->currentIndex();
+
+        currentPages.removeAt(indexToDelete);
+        ui->twPages->removeTab(indexToDelete);
+        updateTabNames(indexToDelete);
+    }
+}
+
+void WmFormatPage::updateTabNames(int startIndex){
+    // Update all other tab texts
+    for(int i=startIndex; i<ui->twPages->count(); i++){
+        ui->twPages->setTabText(i, "Page " + QString::number(i+1));
+    }
+}
+
+void WmFormatPage::setCurrentFormatting(int index){
+
+    QFont defaultFont;
+    defaultFont.setFamily(ui->fcbFont->currentText());
+    defaultFont.setPointSize(ui->cbTextSize->currentText().toInt());
+
+    this->currentPages[index]->getMainText().setFont(defaultFont);
+    this->currentPages[index]->getFooterText().setFont(defaultFont);
+}
+
+void WmFormatPage::setDefaultOniFont(int index){
+
+    QFont defaultFont;
+    defaultFont.setFamily("Tahoma");
+    defaultFont.setPointSize(12);
+
+    this->currentPages[index]->getMainText().setFont(defaultFont);
+    defaultFont.setPointSize(10);
+    this->currentPages[index]->getFooterText().setFont(defaultFont);
+
+    this->currentPages[index]->getMainText().setTextColor(Qt::green);
+    this->currentPages[index]->getMainText().setFontWeight(QFont::Bold);
+    this->currentPages[index]->getFooterText().setTextColor(Qt::green);
+    this->currentPages[index]->getFooterText().setFontWeight(QFont::Bold);
+}
+
+QList<std::shared_ptr<WmPage> >& WmFormatPage::getCurrentPages(){
+    return this->currentPages;
+}
+
+// Ignore enter key in this page, so user can do enter after write the custom font
+void WmFormatPage::keyPressEvent(QKeyEvent * event){
+
+    if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter){
+        return;
+    }
+
+
+    QWizardPage::keyPressEvent(event);
+}
+
+
Index: s10k/Vago/windowMessagesWizard/wmformatpage.h
===================================================================
--- s10k/Vago/windowMessagesWizard/wmformatpage.h	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmformatpage.h	(revision 1092)
@@ -0,0 +1,71 @@
+#ifndef WMFORMATPAGE_H
+#define WMFORMATPAGE_H
+
+#include <QWizardPage>
+#include <QColorDialog>
+#include <QKeyEvent>
+#include <QTextBlock>
+
+#include "utilvago.h"
+#include "WmPage.h"
+#include "wmsetuppage.h"
+
+namespace Ui {
+class WmFormatPage;
+}
+
+class WmFormatPage : public QWizardPage
+{
+    Q_OBJECT
+    
+public:
+    explicit WmFormatPage(Logger *myLogger, QWidget *parent = 0);
+    QList<std::shared_ptr<WmPage> >& getCurrentPages();
+
+    ~WmFormatPage();
+    
+private slots:
+    bool validatePage();
+
+    void on_tbBold_clicked();
+
+    void on_pbAddPageAfter_clicked();
+
+    void on_pbAddPageBefore_clicked();
+
+    void on_pbDeleteCurrentPage_clicked();
+
+    void on_tbItalic_clicked();
+
+    void on_tbFontColor_clicked();
+
+    void on_fcbFont_currentFontChanged(const QFont &f);
+
+    void on_cbTextSize_currentTextChanged(const QString &arg1);
+
+private:
+    enum class FormatType{
+        BOLD,
+        ITALIC,
+        COLOR,
+        FONT_TYPE,
+        FONT_SIZE
+    };
+
+    Ui::WmFormatPage *ui;
+    QList<std::shared_ptr<WmPage>> currentPages;
+    bool windowsIsInitialized = false;
+    Logger *myLogger;
+
+private:
+    void setupComboBoxTextSize();
+    void addPage(bool afterCurrentPage = true);
+    void updateTabNames(int startIndex);
+    void setCurrentFormatting(int index);
+    void setDefaultOniFont(int index);
+    void formatText(FormatType desiredFormatType);
+    void initializePage();
+    void keyPressEvent (QKeyEvent * event);
+};
+
+#endif // WMFORMATPAGE_H
Index: s10k/Vago/windowMessagesWizard/wmformatpage.ui
===================================================================
--- s10k/Vago/windowMessagesWizard/wmformatpage.ui	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmformatpage.ui	(revision 1092)
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>WmFormatPage</class>
+ <widget class="QWizardPage" name="WmFormatPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>451</width>
+    <height>287</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <property name="bottomMargin">
+      <number>5</number>
+     </property>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pbAddPageBefore">
+       <property name="text">
+        <string>Add page before</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/new/icons/plus.png</normaloff>:/new/icons/plus.png</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pbAddPageAfter">
+       <property name="text">
+        <string>Add page after</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/new/icons/plus.png</normaloff>:/new/icons/plus.png</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pbDeleteCurrentPage">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="text">
+        <string>Delete current page</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/new/icons/minus.png</normaloff>:/new/icons/minus.png</iconset>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QToolButton" name="tbBold">
+       <property name="toolTip">
+        <string>Bold</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/new/icons/formatting_bold.png</normaloff>:/new/icons/formatting_bold.png</iconset>
+       </property>
+       <property name="shortcut">
+        <string>Ctrl+B</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="tbItalic">
+       <property name="toolTip">
+        <string>Italic</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/new/icons/formatting_italic.png</normaloff>:/new/icons/formatting_italic.png</iconset>
+       </property>
+       <property name="shortcut">
+        <string>Ctrl+I</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="tbFontColor">
+       <property name="toolTip">
+        <string>Font Color</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/new/icons/formatting_color.png</normaloff>:/new/icons/formatting_color.png</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QFontComboBox" name="fcbFont">
+       <property name="currentFont">
+        <font>
+         <family>Tahoma</family>
+        </font>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="cbTextSize">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>80</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTabWidget" name="twPages">
+     <property name="currentIndex">
+      <number>-1</number>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/windowMessagesWizard/wmpage.cpp
===================================================================
--- s10k/Vago/windowMessagesWizard/wmpage.cpp	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmpage.cpp	(revision 1092)
@@ -0,0 +1,123 @@
+#include "wmpage.h"
+
+WmPage::WmPage(QWidget *currentTab)
+{
+    createAndAddPageToTab(currentTab);
+}
+
+void WmPage::createAndAddPageToTab(QWidget *currentTab){
+    // Adapted from here: http://stackoverflow.com/questions/5258665/how-to-set-number-of-lines-for-an-qtextedit
+    // Thanks TonyK
+    // Note: not working totally as expected. It isnt resizing correctly for the number of rows.
+    std::function<void(QTextEdit*, int)> setNumberOfRows = [](QTextEdit* textEdit, int rows){
+        textEdit->setFixedHeight(QFontMetrics(textEdit->font()).lineSpacing() * rows);
+    };
+
+    this->pageTab = currentTab;
+
+    QGroupBox *mainTextGroupBox = new QGroupBox(this->pageTab);
+    mainTextGroupBox->setTitle("Main Text");
+
+    this->mainText = new QTextEdit(this->pageTab);
+    setNumberOfRows(this->mainText, 8);
+    this->mainText->setAcceptRichText(false); // block pasting of external formatting
+    this->mainText->setWordWrapMode(QTextOption::NoWrap);
+    QPalette auxPalette = this->mainText->palette();
+    auxPalette.setColor(QPalette::Base, QColor(64,64,64));
+    this->mainText->setPalette(auxPalette);
+
+    QVBoxLayout *mainTextGroupBoxLayout = new QVBoxLayout();
+    mainTextGroupBoxLayout->addWidget(this->mainText);
+    mainTextGroupBox->setLayout(mainTextGroupBoxLayout);
+
+    footerTextGroupBox = new QGroupBox(this->pageTab);
+    footerTextGroupBox->setTitle("Footer Text");
+
+    this->footerText = new QTextEdit(footerTextGroupBox);
+    setNumberOfRows(this->footerText, 4);
+    this->footerText->setAcceptRichText(false); // block pasting of external formatting
+    this->footerText->setWordWrapMode(QTextOption::NoWrap);
+    this->footerText->setPalette(auxPalette);
+
+
+    QVBoxLayout *footerTextGroupBoxLayout = new QVBoxLayout();
+    footerTextGroupBoxLayout->addWidget(this->footerText);
+    footerTextGroupBox->setLayout(footerTextGroupBoxLayout);
+
+    this->middleImage = new QLabel(this->pageTab);
+    this->middleImage->setText("No image selected");
+    this->middleImage->setFixedSize(140,100);
+    this->middleImage->setFrameShape(QFrame::StyledPanel);
+    this->middleImage->setWordWrap(true); // allows us to have text in multiple rows
+    this->middleImage->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter); // align text at center
+
+    this->addRemoveImageButton = new QToolButton(this->pageTab);
+    this->addRemoveImageButton->setToolTip("Click to add an image");
+    this->addRemoveImageButton->setIcon(QIcon(":/new/icons/plus.png"));
+
+    QHBoxLayout *imageLayoutCenter = new QHBoxLayout();
+    imageLayoutCenter->addSpacerItem(new QSpacerItem(1,1, QSizePolicy::Expanding, QSizePolicy::Fixed));
+    imageLayoutCenter->addWidget(this->middleImage);
+    imageLayoutCenter->addWidget(this->addRemoveImageButton);
+    imageLayoutCenter->addSpacerItem(new QSpacerItem(1,1, QSizePolicy::Expanding, QSizePolicy::Fixed));
+
+    QVBoxLayout *pageLayout = new QVBoxLayout();
+    pageLayout->addWidget(mainTextGroupBox);
+    pageLayout->addLayout(imageLayoutCenter);
+    pageLayout->addWidget(footerTextGroupBox);
+
+    this->pageTab->setLayout(pageLayout);
+
+    // Connect addRemoveImageButton to our slot
+    connect(this->addRemoveImageButton, SIGNAL(clicked(bool)), this, SLOT(addRemoveImageButtonTriggered()));
+}
+
+
+QTextEdit& WmPage::getMainText(){
+    return *this->mainText;
+}
+
+QTextEdit& WmPage::getFooterText(){
+    return *this->footerText;
+}
+
+QLabel& WmPage::getMiddleImage(){
+    return *this->middleImage;
+}
+
+void WmPage::hideFooterText(){
+    this->footerTextGroupBox->hide();
+}
+
+void WmPage::showFooterText(){
+    this->footerTextGroupBox->show();
+}
+
+void WmPage::addRemoveImageButtonTriggered(){
+
+    if(this->middleImage->pixmap() == nullptr){
+
+        QString selectedImage = QFileDialog::getOpenFileName(this->pageTab,"Choose the image file...","./" , "Image (*.JPG *.JPEG *.PNG)");
+
+        if(!selectedImage.isEmpty()){
+
+            this->middleImage->setText(selectedImage);
+            this->middleImage->setToolTip(selectedImage);
+
+            this->middleImage->setPixmap( selectedImage );
+
+            // Thanks bukkfa!
+            // http://stackoverflow.com/questions/5653114/display-image-in-qt-to-fit-label-size
+            this->middleImage->setScaledContents( true );
+            this->addRemoveImageButton->setToolTip("Click to remove the image");
+            this->addRemoveImageButton->setIcon(QIcon(":/new/icons/abort.png"));
+        }
+    }
+    else{
+        this->middleImage->setToolTip("");
+        this->middleImage->clear();
+        this->middleImage->setText("No image selected");
+        this->addRemoveImageButton->setToolTip("Click to add an image");
+        this->addRemoveImageButton->setIcon(QIcon(":/new/icons/plus.png"));
+    }
+}
Index: s10k/Vago/windowMessagesWizard/wmpage.h
===================================================================
--- s10k/Vago/windowMessagesWizard/wmpage.h	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmpage.h	(revision 1092)
@@ -0,0 +1,39 @@
+#ifndef WMPAGE_H
+#define WMPAGE_H
+
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QTextEdit>
+#include <QGroupBox>
+#include <QLabel>
+#include <QSpacerItem>
+#include <QToolButton>
+#include <QFileDialog>
+#include <functional>
+
+#include "utilvago.h"
+
+class WmPage : public QObject // for signals and slots
+{
+    Q_OBJECT
+public:
+    WmPage(QWidget *currentTab);
+    QTextEdit& getMainText();
+    QTextEdit& getFooterText();
+    QLabel& getMiddleImage();
+    void hideFooterText();
+    void showFooterText();
+private:
+    QTextEdit* mainText;
+    QTextEdit* footerText;
+    QLabel* middleImage;
+    QToolButton* addRemoveImageButton;
+    QWidget *pageTab;
+    QGroupBox *footerTextGroupBox;
+private:
+    void createAndAddPageToTab(QWidget *currentTab);
+private slots:
+    void addRemoveImageButtonTriggered();
+};
+
+#endif // WMPAGE_H
Index: s10k/Vago/windowMessagesWizard/wmsetuppage.cpp
===================================================================
--- s10k/Vago/windowMessagesWizard/wmsetuppage.cpp	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmsetuppage.cpp	(revision 1092)
@@ -0,0 +1,171 @@
+#include "wmsetuppage.h"
+#include "ui_wmsetuppage.h"
+
+WmSetupPage::WmSetupPage(QWidget *parent) :
+    QWizardPage(parent),
+    ui(new Ui::WmSetupPage)
+{
+    ui->setupUi(this);
+
+    this->setTitle("Type of Window");
+    this->setSubTitle("Choose here what kind of pages do you want to create, to be displayed in the game.");
+
+    // Initialize combobox (hacky!)
+    for(int i=0; i<static_cast<int>(WINDOW_TYPE::ENUM_END); i++){
+        ui->cbWindowType->addItem(getWindowTypeDescription(static_cast<WINDOW_TYPE>(i)));
+    }
+
+    //Register fields to be accessible in another pages //Not using mandatory field, it would require empty verification too...
+    registerField("cbWindowType", ui->cbWindowType);
+    registerField("leLevelId", ui->leLevelId);
+    registerField("leFileName", ui->leFileName);
+    registerField("lePageNumber", ui->lePageNumber);
+    registerField("leWeaponClassName", ui->leWeaponClassName);
+    registerField("cbIsLearnedMove", ui->cbIsLearnedMove);
+}
+
+WmSetupPage::~WmSetupPage()
+{
+    delete ui;
+}
+
+bool WmSetupPage::validatePage(){
+
+    QStringList stringsToCheck;
+
+    stringsToCheck << ui->leFileName->text();
+
+    if((ui->lePageNumber->isEnabled())){
+        stringsToCheck << ui->lePageNumber->text();
+    }
+    if((ui->leLevelId->isEnabled())){
+        stringsToCheck << ui->leLevelId->text();
+    }
+    if((ui->leWeaponClassName->isEnabled())){
+        stringsToCheck << ui->leWeaponClassName->text();
+    }
+
+    if(Util::checkEmptySpaces(stringsToCheck)){
+        Util::showErrorPopUp("You need to fill all fields first!");
+        return false;
+    }
+
+    return true;
+}
+
+
+
+void WmSetupPage::on_leLevelId_textChanged(const QString &arg1)
+{
+    if(arg1.trimmed().isEmpty()){
+        return;
+    }
+
+    if(!Util::isStringInteger(arg1)){
+        Util::showErrorPopUp("The level id inputted is invalid! It must be a number.");
+        return;
+    }
+
+    switch(static_cast<WINDOW_TYPE>(ui->cbWindowType->currentIndex())){
+    case WINDOW_TYPE::OBJECTIVE:
+        ui->leFileName->setText(QString("OPgelevel_") + arg1.trimmed());
+        break;
+    case  WINDOW_TYPE::DIARY:
+        generateDiaryFileName();
+        break;
+    case  WINDOW_TYPE::TEXT_CONSOLE:
+        ui->leFileName->setText(QString("TxtClevel_") + arg1.trimmed());
+        break;
+    case  WINDOW_TYPE::HELP:
+    case  WINDOW_TYPE::WEAPON:
+    case  WINDOW_TYPE::ITEM:
+    case  WINDOW_TYPE::ENUM_END:
+        break;
+    }
+}
+
+void WmSetupPage::on_lePageNumber_textChanged(const QString &arg1)
+{
+    if(arg1.trimmed().isEmpty()){
+        return;
+    }
+
+    if(!Util::isStringInteger(arg1)){
+        Util::showErrorPopUp("The page number inputted is invalid! It must be a number.");
+        return;
+    }
+
+    switch(static_cast<WINDOW_TYPE>(ui->cbWindowType->currentIndex())){
+    case  WINDOW_TYPE::DIARY:
+        generateDiaryFileName();
+        break;
+    case  WINDOW_TYPE::ITEM:
+        ui->leFileName->setText("IPge");
+        break;
+    case  WINDOW_TYPE::OBJECTIVE:
+    case  WINDOW_TYPE::TEXT_CONSOLE:
+    case  WINDOW_TYPE::HELP:
+    case  WINDOW_TYPE::WEAPON:
+    case  WINDOW_TYPE::ENUM_END:
+        break;
+    }
+
+}
+
+void WmSetupPage::on_cbWindowType_currentTextChanged(const QString &arg1)
+{
+    // when we hide the widgets qt will left some empty space, to remove this space we remove and add also the widgets:
+    // http://stackoverflow.com/questions/17986164/how-to-removing-remaining-spacing-after-hide-a-row-in-qformlayout
+
+    ui->leLevelId->setEnabled(false);
+    ui->lePageNumber->setEnabled(false);
+    ui->leWeaponClassName->setEnabled(false);
+    ui->cbIsLearnedMove->setEnabled(false);
+
+    if(arg1 == getWindowTypeDescription(WINDOW_TYPE::DIARY)){
+        ui->leLevelId->setEnabled(true);
+        ui->lePageNumber->setEnabled(true);
+        ui->cbIsLearnedMove->setEnabled(true);
+    }
+    else if(arg1 == getWindowTypeDescription(WINDOW_TYPE::WEAPON)){
+        ui->leWeaponClassName->setEnabled(true);
+    }
+    else if(arg1 == getWindowTypeDescription(WINDOW_TYPE::ITEM)){
+        ui->lePageNumber->setEnabled(true);
+    }
+    else if(arg1 == getWindowTypeDescription(WINDOW_TYPE::HELP)){
+        ui->leFileName->setText("HPgehelp_pg_01");
+    }
+    else{
+        ui->leLevelId->setEnabled(true);
+    }
+}
+
+void WmSetupPage::on_leWeaponClassName_textChanged(const QString &arg1)
+{
+    ui->leFileName->setText(QString("WPge") + arg1.trimmed().replace("ONWC",""));
+}
+
+QString WmSetupPage::getWindowTypeDescription(const WINDOW_TYPE wt){
+    switch(wt){
+    case WINDOW_TYPE::OBJECTIVE:
+        return "Objective Page(s) [OPge]";
+    case WINDOW_TYPE::TEXT_CONSOLE:
+        return "Text Console Pages(s) [TxtC]";
+    case WINDOW_TYPE::WEAPON:
+        return "Weapon Page(s) [WPge]";
+    case WINDOW_TYPE::ITEM:
+        return "Item Pages(s) [IPge]";
+    case WINDOW_TYPE::DIARY:
+        return "Diary Page  [DPge]";
+    case WINDOW_TYPE::HELP:
+        return "Help Page(s) [HPge]";
+    default:
+        return "ERROR WINDOW_TYPE ENUM";
+    }
+
+}
+
+void WmSetupPage::generateDiaryFileName(){
+    ui->leFileName->setText(QString("DPgelev_") + (ui->leLevelId->text().trimmed().length() == 1 ? "0" : "") + ui->leLevelId->text() + "_" + ui->lePageNumber->text());
+}
Index: s10k/Vago/windowMessagesWizard/wmsetuppage.h
===================================================================
--- s10k/Vago/windowMessagesWizard/wmsetuppage.h	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmsetuppage.h	(revision 1092)
@@ -0,0 +1,47 @@
+#ifndef WMSETUPPAGE_H
+#define WMSETUPPAGE_H
+
+#include <QWizardPage>
+
+#include "utilvago.h"
+
+namespace Ui {
+class WmSetupPage;
+}
+
+enum class WINDOW_TYPE{
+    OBJECTIVE = 0,
+    TEXT_CONSOLE,
+    WEAPON,
+    ITEM,
+    DIARY,
+    HELP,
+    ENUM_END
+};
+
+class WmSetupPage : public QWizardPage
+{
+    Q_OBJECT
+public:
+    explicit WmSetupPage(QWidget *parent = 0);
+    ~WmSetupPage();
+    
+private slots:
+    bool validatePage();
+
+    void on_leLevelId_textChanged(const QString &arg1);
+
+    void on_lePageNumber_textChanged(const QString &arg1);
+
+    void on_cbWindowType_currentTextChanged(const QString &arg1);
+
+    void on_leWeaponClassName_textChanged(const QString &arg1);
+
+private:
+    Ui::WmSetupPage *ui;
+private:
+    void generateDiaryFileName();
+    QString getWindowTypeDescription(const WINDOW_TYPE wt);
+};
+
+#endif // WMSETUPPAGE_H
Index: s10k/Vago/windowMessagesWizard/wmsetuppage.ui
===================================================================
--- s10k/Vago/windowMessagesWizard/wmsetuppage.ui	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmsetuppage.ui	(revision 1092)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>WmSetupPage</class>
+ <widget class="QWizardPage" name="WmSetupPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>451</width>
+    <height>314</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QFormLayout" name="formLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label_5">
+     <property name="text">
+      <string>Window Type:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QComboBox" name="cbWindowType"/>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="lbLevelId">
+     <property name="text">
+      <string>Level ID:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="leLevelId"/>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="lbDiaryPageNumber">
+     <property name="text">
+      <string>Page Number:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="lePageNumber"/>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="lbWeaponClassName">
+     <property name="toolTip">
+      <string>Weapon class name for example: ONWCw1_tap</string>
+     </property>
+     <property name="text">
+      <string>Weapon Class Name:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QLineEdit" name="leWeaponClassName">
+     <property name="toolTip">
+      <string>Weapon class name for example: ONWCw1_tap</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0">
+    <widget class="QLabel" name="label_7">
+     <property name="text">
+      <string>Filename:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1">
+    <widget class="QLineEdit" name="leFileName"/>
+   </item>
+   <item row="5" column="0">
+    <widget class="QCheckBox" name="cbIsLearnedMove">
+     <property name="text">
+      <string>Is Learned Move</string>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: s10k/Vago/windowMessagesWizard/wmwizard.cpp
===================================================================
--- s10k/Vago/windowMessagesWizard/wmwizard.cpp	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmwizard.cpp	(revision 1092)
@@ -0,0 +1,33 @@
+#include "wmwizard.h"
+
+WmWizard::WmWizard(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger)
+:AbstractWizard(appDir, workspaceWizardLocation, vagoSettings, myLogger, true)
+{
+    this->bgImagesLocation=this->workspaceWizardLocation+"/WindowMessages";
+}
+
+void WmWizard::exec(){
+
+    WmSetupPage *setupPage = new WmSetupPage();
+    WmFormatPage *formatPage = new WmFormatPage(this->myLogger);
+    WmFinalPage *finalPage = new WmFinalPage(this->appDir, this->bgImagesLocation, this->myLogger, formatPage->getCurrentPages());
+
+    this->myWizard.addPage
+    (
+        createIntroPage
+        (
+            "Welcome to the Oni Window Messages Wizard.\n"
+            "This wizard will allow you to create in a few and simple steps Oni Window Messages (DPge, HPge etc).\n"
+            "This Window Messages are used to display information to the player in consoles, diary, help, item / weapon pages etc."
+        )
+    );
+    this->myWizard.addPage(setupPage);
+    this->myWizard.addPage(formatPage);
+    this->myWizard.addPage(finalPage);
+
+    showWizard("Window Messages Wizard", ":/new/icons/windowmessages.png");
+}
+
+void WmWizard::beforeClose(QDialog::DialogCode){
+
+}
Index: s10k/Vago/windowMessagesWizard/wmwizard.h
===================================================================
--- s10k/Vago/windowMessagesWizard/wmwizard.h	(revision 1092)
+++ s10k/Vago/windowMessagesWizard/wmwizard.h	(revision 1092)
@@ -0,0 +1,21 @@
+#ifndef WMWIZARD_H
+#define WMWIZARD_H
+
+// Local includes
+#include "abstractwizard.h"
+#include "wmsetuppage.h"
+#include "wmformatpage.h"
+#include "wmfinalpage.h"
+
+class WmWizard: public AbstractWizard // for signals and slots
+{
+protected:
+    WmWizard(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger);
+    void exec();
+private:
+    QString bgImagesLocation;
+private:
+    void beforeClose(QDialog::DialogCode resultStatus);
+};
+
+#endif // WMWIZARD_H
Index: s10k/Vago/wizardfactory.h
===================================================================
--- s10k/Vago/wizardfactory.h	(revision 1092)
+++ s10k/Vago/wizardfactory.h	(revision 1092)
@@ -0,0 +1,48 @@
+#ifndef WIZARDFACTORY_H
+#define WIZARDFACTORY_H
+
+#include "soundwizard.h"
+
+// This template class allows us to create wizards in the heap which auto-delete themselves once finished
+template<typename T>
+class WizardFactory : public T
+{
+public:
+    static void startInstance(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger){
+        (new WizardFactory<T>(appDir, workspaceWizardLocation, vagoSettings, myLogger))->exec();
+    }
+private:
+    // We need to have a constructor to be able to acess "exec" protected function
+    WizardFactory
+    (
+            const QString &appDir,
+            const QString &workspaceWizardLocation,
+            QSettings *vagoSettings,
+            Logger *myLogger
+    ):T(appDir, workspaceWizardLocation, vagoSettings, myLogger){}
+};
+
+// Specialization for SoundWizard (it receives extra variables)
+template<>
+class WizardFactory<SoundWizard> : public SoundWizard
+{
+public:
+    static void startInstance(const QString &appDir, const QString &workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger, QHash<QString, QString> *commandMap){
+        (new WizardFactory(appDir, workspaceWizardLocation, vagoSettings, myLogger, commandMap))->exec();
+    }
+private:
+    WizardFactory
+    (
+            const QString &appDir,
+            const QString &workspaceWizardLocation,
+            QSettings *vagoSettings,
+            Logger *myLogger,
+            QHash<QString, QString> *commandMap
+    ):SoundWizard(appDir, workspaceWizardLocation, vagoSettings, myLogger, commandMap){}
+};
+
+
+
+
+
+#endif // WIZARDFACTORY_H
Index: s10k/Vago/xmlToolsInterface/xmltoolsinterface.cpp
===================================================================
--- s10k/Vago/xmlToolsInterface/xmltoolsinterface.cpp	(revision 1092)
+++ s10k/Vago/xmlToolsInterface/xmltoolsinterface.cpp	(revision 1092)
@@ -0,0 +1,416 @@
+#include "xmltoolsinterface.h"
+#include "ui_xmltoolsinterface.h"
+
+XmlToolsInterface::XmlToolsInterface(Logger *myLogger, QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::XmlToolsInterface),
+    xmlProcessor()
+{
+    ui->setupUi(this);
+    this->setAttribute(Qt::WA_DeleteOnClose, true); //destroy itself once finished.
+    this->myLogger = myLogger;
+    this->xmlProcessor = new XmlProcessor(UtilVago::getAppPath(), this->myLogger, &this->listToProccess);
+
+    // setup the correct input options for the current selection
+    on_rbFilterRelativeElements_clicked();
+    on_cbFilterParentElement_toggled(ui->cbFilterParentElement->isChecked());
+    on_cbFilterAttributeName_toggled(ui->cbFilterAttributeName->isChecked());
+    on_cbXmlToolsOperation_currentIndexChanged(ui->cbXmlToolsOperation->currentText());
+
+    connect(this->xmlProcessor, SIGNAL(resultConversion(QString,int)), this, SLOT(TXmlToolsResult(QString,int)));
+}
+
+XmlToolsInterface::~XmlToolsInterface()
+{
+    delete xmlProcessor;
+    delete ui;
+}
+
+void XmlToolsInterface::dropEvent(QDropEvent* event)
+{
+    const QMimeData* mimeData = event->mimeData();
+
+    event->acceptProposedAction();
+
+    // Set the input file. This file type was already validated by the dragEnterEvent at this point
+    ui->leInputInputFiles->setText(mimeData->urls().at(0).toLocalFile());
+}
+
+void XmlToolsInterface::dragEnterEvent(QDragEnterEvent *event){
+    const QMimeData* mimeData = event->mimeData();
+
+    if (mimeData->hasUrls())
+    {
+        if(mimeData->urls().size() == 1 && QFileInfo(mimeData->urls().at(0).toLocalFile()).suffix().toUpper() == "XML"){
+            event->accept();
+        }
+    }
+}
+
+void XmlToolsInterface::on_rbFilterRelativeElements_clicked()
+{
+    ui->leFilterXPathExpression->setEnabled(false);
+    ui->leFilterElement->setEnabled(true);
+    ui->leFilterParentElement->setEnabled(true);
+    ui->lbFilterElement->setEnabled(true);
+    ui->cbFilterParentElement->setEnabled(true);
+    ui->leFilterAttributeName->setEnabled(true);
+    ui->leFilterAttributeValue->setEnabled(true);
+    ui->lbFilterAttributeValue->setEnabled(true);
+    ui->cbFilterAttributeName->setEnabled(true);
+
+    on_cbFilterParentElement_toggled(ui->cbFilterParentElement->isChecked());
+    on_cbFilterAttributeName_toggled(ui->cbFilterAttributeName->isChecked());
+
+    setCommand();
+}
+
+void XmlToolsInterface::on_rbFilterXPathExpression_clicked()
+{
+    ui->leFilterElement->setEnabled(false);
+    ui->leFilterParentElement->setEnabled(false);
+    ui->lbFilterElement->setEnabled(false);
+    ui->cbFilterParentElement->setEnabled(false);
+    ui->leFilterAttributeName->setEnabled(false);
+    ui->leFilterAttributeValue->setEnabled(false);
+    ui->lbFilterAttributeValue->setEnabled(false);
+    ui->cbFilterAttributeName->setEnabled(false);
+    ui->leFilterXPathExpression->setEnabled(true);
+
+    setCommand();
+}
+
+void XmlToolsInterface::on_cbXmlToolsOperation_currentIndexChanged(const QString &arg1)
+{
+    ui->leInputCurrentValues->setEnabled(true);
+    ui->leInputNewValues->setEnabled(true);
+    ui->leInputDiffOldNewValue->setEnabled(true);
+    ui->leInputPositions->setEnabled(true);
+
+    if(arg1 == "Add Values"){
+        ui->leInputCurrentValues->setEnabled(false);
+        ui->leInputDiffOldNewValue->setEnabled(false);
+        ui->leInputPositions->setEnabled(false);
+    }
+    else if(arg1 == "Remove Values"){
+        ui->leInputNewValues->setEnabled(false);
+        ui->leInputDiffOldNewValue->setEnabled(false);
+        ui->leInputPositions->setEnabled(false);
+    }
+    else if(arg1 == "Replace Single Value"){
+        ui->leInputDiffOldNewValue->setEnabled(false);
+        ui->leInputPositions->setEnabled(false);
+    }
+    else if(arg1 == "Replace All Values"){
+        ui->leInputCurrentValues->setEnabled(false);
+        ui->leInputDiffOldNewValue->setEnabled(false);
+    }
+    else if(arg1 == "Update Elements"){
+        ui->leInputCurrentValues->setEnabled(false);
+        ui->leInputNewValues->setEnabled(false);
+        ui->leInputPositions->setEnabled(false);
+    }
+    else if(arg1 == "Invert Elements"){
+        ui->leInputCurrentValues->setEnabled(false);
+        ui->leInputNewValues->setEnabled(false);
+        ui->leInputDiffOldNewValue->setEnabled(false);
+        ui->leInputPositions->setEnabled(false);
+    }
+
+    setCommand();
+}
+
+void XmlToolsInterface::on_cbFilterParentElement_toggled(bool checked)
+{
+    ui->leFilterParentElement->setEnabled(checked);
+}
+
+void XmlToolsInterface::on_cbFilterAttributeName_toggled(bool checked)
+{
+    ui->leFilterAttributeName->setEnabled(checked);
+    ui->leFilterAttributeValue->setEnabled(checked);
+}
+
+void XmlToolsInterface::on_pbInputBrowse_clicked()
+{
+    QString result = QFileDialog::getOpenFileName(this,"Choose the XML file...","./" , "XML Files (*.xml)");
+
+    if(!result.isEmpty()){
+        ui->leInputInputFiles->setText(result);
+    }
+}
+
+void XmlToolsInterface::on_pbPreviewOperation_clicked()
+{
+    if(!validateInput()){
+        return;
+    }
+    this->listToProccess.clear();
+
+    // Copy the target file to temporary location and aply to it the command
+
+    QString currentFileLocation = ui->leInputInputFiles->text();
+    QString previewFileLocation=GlobalVars::VagoTemporaryDir+"/"+QFileInfo(currentFileLocation).fileName();
+
+    QFile oldFile(previewFileLocation);
+
+    // Create temp folder if it doesn't exist
+    if(!QDir(GlobalVars::VagoTemporaryDir).exists()){
+        QDir().mkdir(GlobalVars::VagoTemporaryDir);
+    }
+
+    if(oldFile.exists()){
+        if(!oldFile.remove()){
+            UtilVago::showAndLogErrorPopUpLogButton(this->myLogger,
+                                                    "Couldn't remove old temporary file to preview XML patch! Existing file:\n"
+                                                    + previewFileLocation
+                                                    );
+        }
+    }
+
+    if(!QFile::copy(currentFileLocation, previewFileLocation)){
+        UtilVago::showAndLogErrorPopUpLogButton(this->myLogger,
+                                                "Couldn't create temporary file to preview the XML patch!\nFrom: " +
+                                                currentFileLocation +
+                                                "\nTo: " + previewFileLocation
+                                                );
+        return;
+    }
+
+    this->listToProccess.append(buildCommand(previewFileLocation).remove(0,9)); // 0,9 removes XmlTools from the beginning
+    this->previewInProgress = true;
+
+    this->xmlProcessor->start();
+    this->xmlProcessor->wait(); // wait for the XML to be processed
+
+    XmlToolsInterfaceCommandPreview *previewWindow = new XmlToolsInterfaceCommandPreview(currentFileLocation, previewFileLocation, this);
+    previewWindow->show();
+}
+
+void XmlToolsInterface::on_pbApplyOperation_clicked()
+{
+    if(!validateInput()){
+        return;
+    }
+
+    this->listToProccess.clear();
+    this->listToProccess.append(ui->leOperationCommandGenCommand->text().remove(0,9)); // 0,9 removes XmlTools from the beginning
+    this->xmlProcessor->start();
+}
+
+// return true if valid, false otherwise
+bool XmlToolsInterface::validateInput()
+{
+
+    if(ui->leInputInputFiles->text().trimmed().isEmpty()){
+        Util::showErrorPopUp("You must provide an Input File!");
+        return false;
+    }
+
+    if(ui->rbFilterRelativeElements->isChecked() && ui->leFilterElement->text().trimmed().isEmpty()){
+        Util::showErrorPopUp("With Relative Elements checked you must provide a Element Name!");
+        return false;
+    }
+
+    if(ui->cbFilterParentElement->isChecked() && ui->leFilterParentElement->text().trimmed().isEmpty()){
+        Util::showErrorPopUp("Parent Element is checked but none was provided!");
+        return false;
+    }
+
+    if(ui->cbFilterAttributeName->isChecked()){
+        if(ui->leFilterAttributeName->text().trimmed().isEmpty())
+        {
+            Util::showErrorPopUp("Attribute Name is checked but none was provided!");
+            return false;
+        }
+
+        if(ui->leFilterAttributeValue->text().trimmed().isEmpty())
+        {
+            Util::showErrorPopUp("With Attribute Name checked you must provide a Attribute Value!");
+            return false;
+        }
+    }
+
+    if(ui->rbFilterXPathExpression->isChecked() && ui->leFilterXPathExpression->text().trimmed().isEmpty())
+    {
+        Util::showErrorPopUp("X-Path Expression is checked but none was provided!");
+        return false;
+    }
+
+    if(ui->cbXmlToolsOperation->currentText() == "Add Values" && ui->leInputNewValues->text().isEmpty()){
+        Util::showErrorPopUp(R"|(With "Add Values" operation selected you must provide the "New Value(s)" to be added.)|");
+        return false;
+    }
+
+    if(ui->cbXmlToolsOperation->currentText() == "Remove Values" && ui->leInputCurrentValues->text().isEmpty()){
+        Util::showErrorPopUp(R"|(With "Remove Value" operation selected you must provide the "Current Value(s)" to be removed.)|");
+        return false;
+    }
+
+    return true;
+}
+
+void XmlToolsInterface::TXmlToolsResult(QString result, int numErrors){
+
+    if(!this->previewInProgress){
+        QApplication::alert(this); //Show a notification if window is not active (only when not previewing)
+    }
+
+    if(numErrors!=0){
+        QString sNumErrors=QString::number(numErrors);
+        if(numErrors>1){
+            UtilVago::showErrorPopUpLogButton(result+"\n This is the last of "+sNumErrors+" errors.");
+        }
+        else{
+            UtilVago::showErrorPopUpLogButton(result);
+        }
+    }
+    else if(numErrors == 0){
+        // if there's a preview in progress don't display the message below
+        if(!this->previewInProgress){
+            Util::showPopUp("File(s) processed with sucess!");
+        }
+    }
+
+    this->previewInProgress = false;
+}
+
+void XmlToolsInterface::setCommand(){
+  ui->leOperationCommandGenCommand->setText(buildCommand());
+}
+
+QString XmlToolsInterface::buildCommand(const QString &alternativeFileLocation){
+    QString currCommand;
+
+    QString currOperation = ui->cbXmlToolsOperation->currentText();
+
+    if(currOperation == "Add Values"){
+        currCommand += "--add-values ";
+    }
+    else if(currOperation == "Remove Values"){
+        currCommand += "--remove-values ";
+    }
+    else if(currOperation == "Replace Single Value"){
+        currCommand += "--replace-value ";
+    }
+    else if(currOperation == "Replace All Values"){
+        currCommand += "--replace-all-values ";
+    }
+    else if(currOperation == "Update Elements"){
+        currCommand += "--update-elements ";
+    }
+    else if(currOperation == "Invert Elements"){
+        currCommand += "--invert-elements ";
+    }
+
+    if(ui->leInputNewValues->isEnabled()){
+        currCommand += "--new-val " + Util::insertQuotes(ui->leInputNewValues->text()) + " ";
+    }
+
+    if(ui->leInputCurrentValues->isEnabled()){
+        currCommand += "--current-val " + Util::insertQuotes(ui->leInputCurrentValues->text()) + " ";
+    }
+
+    if(ui->leInputPositions->isEnabled() && !ui->leInputPositions->text().trimmed().isEmpty()){
+        currCommand += "--positions " + Util::insertQuotes(ui->leInputPositions->text()) + " ";
+    }
+
+    if(ui->leInputDiffOldNewValue->isEnabled()){
+        currCommand += "--diff-old-new-val " + Util::insertQuotes(ui->leInputDiffOldNewValue->text()) + " ";
+    }
+
+    if(ui->rbFilterRelativeElements->isChecked()){
+        if(ui->leFilterElement->isEnabled()){
+            currCommand += "--element-name " + Util::insertQuotes(ui->leFilterElement->text()) + " ";
+        }
+        if(ui->leFilterParentElement->isEnabled()){
+            currCommand += "--parent-element-name " + Util::insertQuotes(ui->leFilterParentElement->text()) + " ";
+        }
+        if(ui->leFilterAttributeName->isEnabled()){
+            currCommand += "--attribute-name " + Util::insertQuotes(ui->leFilterAttributeName->text()) + " ";
+            currCommand += "--attribute-value " + Util::insertQuotes(ui->leFilterAttributeValue->text()) + " ";
+        }
+    }
+    else{
+        if(ui->leFilterXPathExpression->isEnabled()){
+            currCommand += "--xpath-expression " + Util::insertQuotes(ui->leFilterXPathExpression->text()) + " ";
+        }
+    }
+
+    if(alternativeFileLocation.isEmpty()){
+        currCommand += "--files " + Util::insertQuotes(ui->leInputInputFiles->text());
+    }
+    else{
+        currCommand += "--files " + Util::insertQuotes(alternativeFileLocation);
+    }
+
+
+    if(ui->cbOptionsNoBackups->isChecked()){
+        currCommand += " --no-backups";
+    }
+
+    return "XmlTools " + currCommand;
+}
+
+void XmlToolsInterface::on_pbOperationCommandCopyToClipboard_clicked()
+{
+    QApplication::clipboard()->setText(ui->leOperationCommandGenCommand->text());
+}
+
+void XmlToolsInterface::on_leInputInputFiles_textChanged(const QString &arg1)
+{
+    // If it contains a wildcard we are not able to guarantee that it is editing only one file, in this case we can't preview the result
+    if(arg1.contains("*") || arg1.contains("?")){
+        ui->pbPreviewOperation->setEnabled(false);
+    }
+    else{
+        ui->pbPreviewOperation->setEnabled(true);
+    }
+
+    setCommand();
+}
+
+void XmlToolsInterface::on_leFilterElement_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leFilterParentElement_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leFilterAttributeName_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leFilterAttributeValue_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leInputCurrentValues_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leInputNewValues_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leInputPositions_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_leInputDiffOldNewValue_textChanged(const QString &)
+{
+    setCommand();
+}
+
+void XmlToolsInterface::on_cbOptionsNoBackups_toggled(bool)
+{
+    setCommand();
+}
Index: s10k/Vago/xmlToolsInterface/xmltoolsinterface.h
===================================================================
--- s10k/Vago/xmlToolsInterface/xmltoolsinterface.h	(revision 1092)
+++ s10k/Vago/xmlToolsInterface/xmltoolsinterface.h	(revision 1092)
@@ -0,0 +1,87 @@
+#ifndef XMLTOOLSINTERFACE_H
+#define XMLTOOLSINTERFACE_H
+
+#include <QMainWindow>
+#include <QClipboard>
+#include <QProcess>
+#include <QScrollBar>
+#include <QDragEnterEvent>
+#include <QMimeData>
+#include <QHBoxLayout>
+
+#include "utilvago.h"
+#include "xmlprocessor.h"
+#include "xmltoolsinterfacecommandpreview.h"
+
+
+namespace Ui {
+class XmlToolsInterface;
+}
+
+class XmlToolsInterface : public QMainWindow
+{
+    Q_OBJECT
+    
+public:
+    explicit XmlToolsInterface(Logger *myLogger, QWidget *parent = 0);
+    ~XmlToolsInterface();
+
+protected:
+    
+private slots:
+
+    void TXmlToolsResult(QString result, int numErrors);
+
+    void on_rbFilterRelativeElements_clicked();
+
+    void on_rbFilterXPathExpression_clicked();
+
+    void on_cbXmlToolsOperation_currentIndexChanged(const QString &arg1);
+
+    void on_cbFilterParentElement_toggled(bool checked);
+
+    void on_cbFilterAttributeName_toggled(bool checked);
+
+    void on_pbInputBrowse_clicked();
+
+    void on_pbPreviewOperation_clicked();
+
+    void on_pbOperationCommandCopyToClipboard_clicked();
+
+    void on_leInputInputFiles_textChanged(const QString &arg1);
+
+    void on_leFilterElement_textChanged(const QString &arg1);
+
+    void on_leFilterParentElement_textChanged(const QString &arg1);
+
+    void on_leFilterAttributeName_textChanged(const QString &arg1);
+
+    void on_leFilterAttributeValue_textChanged(const QString &arg1);
+
+    void on_leInputCurrentValues_textChanged(const QString &arg1);
+
+    void on_leInputNewValues_textChanged(const QString &arg1);
+
+    void on_leInputPositions_textChanged(const QString &arg1);
+
+    void on_leInputDiffOldNewValue_textChanged(const QString &arg1);
+
+    void on_cbOptionsNoBackups_toggled(bool checked);
+
+    void on_pbApplyOperation_clicked();
+
+private:
+    Ui::XmlToolsInterface *ui;
+    Logger *myLogger = nullptr;
+    QStringList listToProccess; //commands to execute
+    XmlProcessor *xmlProcessor = nullptr;
+    bool previewInProgress = false;
+
+    bool validateInput();
+    QString buildCommand(const QString &alternativeFileLocation = "");
+    void setCommand();
+    void dropEvent(QDropEvent* event);
+    void dragEnterEvent(QDragEnterEvent *event);
+};
+
+#endif // XMLTOOLSINTERFACE_H
Index: s10k/Vago/xmlToolsInterface/xmltoolsinterface.ui
===================================================================
--- s10k/Vago/xmlToolsInterface/xmltoolsinterface.ui	(revision 1092)
+++ s10k/Vago/xmlToolsInterface/xmltoolsinterface.ui	(revision 1092)
@@ -0,0 +1,548 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>XmlToolsInterface</class>
+ <widget class="QMainWindow" name="XmlToolsInterface">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>650</width>
+    <height>660</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>650</width>
+    <height>660</height>
+   </size>
+  </property>
+  <property name="acceptDrops">
+   <bool>true</bool>
+  </property>
+  <property name="windowTitle">
+   <string>XmlTools Interface</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="../resources.qrc">
+    <normaloff>:/new/icons/xmltoolsinterface.png</normaloff>:/new/icons/xmltoolsinterface.png</iconset>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout_5">
+    <item>
+     <layout class="QFormLayout" name="formLayout_5">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="toolTip">
+         <string>XmlTools Operation that you want to perform.
+Learn more about them in XmlTools documentation page:
+http://wiki.oni2.net/XmlTools</string>
+        </property>
+        <property name="text">
+         <string>XmlTools Operation:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QComboBox" name="cbXmlToolsOperation">
+        <property name="toolTip">
+         <string>XmlTools Operation that you want to perform.
+Learn more about them in XmlTools documentation page:
+http://wiki.oni2.net/XmlTools</string>
+        </property>
+        <item>
+         <property name="text">
+          <string>Add Values</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Remove Values</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Replace Single Value</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Replace All Values</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Update Elements</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Invert Elements</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <spacer name="verticalSpacer_6">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>40</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="groupBox">
+      <property name="title">
+       <string>Filter</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_3">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout">
+           <item>
+            <widget class="QRadioButton" name="rbFilterRelativeElements">
+             <property name="minimumSize">
+              <size>
+               <width>140</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="text">
+              <string>Relative Elements</string>
+             </property>
+             <property name="checked">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <layout class="QGridLayout" name="gridLayout">
+             <item row="0" column="0">
+              <widget class="QLabel" name="lbFilterElement">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="text">
+                <string>Element:</string>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="1">
+              <widget class="QLineEdit" name="leFilterElement"/>
+             </item>
+             <item row="0" column="2">
+              <widget class="QCheckBox" name="cbFilterParentElement">
+               <property name="text">
+                <string>Parent Element:</string>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="3">
+              <widget class="QLineEdit" name="leFilterParentElement"/>
+             </item>
+             <item row="1" column="0">
+              <widget class="QCheckBox" name="cbFilterAttributeName">
+               <property name="text">
+                <string>Attribute Name:</string>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="1">
+              <widget class="QLineEdit" name="leFilterAttributeName"/>
+             </item>
+             <item row="1" column="2">
+              <widget class="QLabel" name="lbFilterAttributeValue">
+               <property name="text">
+                <string>Attribute Value:</string>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="3">
+              <widget class="QLineEdit" name="leFilterAttributeValue">
+               <property name="minimumSize">
+                <size>
+                 <width>80</width>
+                 <height>0</height>
+                </size>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_2">
+           <item>
+            <widget class="QRadioButton" name="rbFilterXPathExpression">
+             <property name="minimumSize">
+              <size>
+               <width>140</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="text">
+              <string>X-Path Expression</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="leFilterXPathExpression"/>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <spacer name="verticalSpacer">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>40</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="groupBox_2">
+      <property name="title">
+       <string>Input</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_4">
+       <item>
+        <layout class="QGridLayout" name="gridLayout_2">
+         <item row="0" column="0">
+          <widget class="QLabel" name="label_2">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="toolTip">
+            <string>XML files to process (wildcards supported)
+
+If you are processing only one file you can also drag and drop it here.</string>
+           </property>
+           <property name="text">
+            <string>Input File(s):</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <layout class="QGridLayout" name="gridLayout_3">
+           <item row="0" column="0">
+            <widget class="QLineEdit" name="leInputInputFiles">
+             <property name="minimumSize">
+              <size>
+               <width>200</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="toolTip">
+              <string>XML files to process (wildcards supported)
+
+If you are processing only one file you can also drag and drop it here.</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QPushButton" name="pbInputBrowse">
+             <property name="text">
+              <string>Browse...</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item row="1" column="0">
+          <widget class="QLabel" name="lbInputCurrentValues">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="toolTip">
+            <string>Value to be replaced or removed (use space as separator)</string>
+           </property>
+           <property name="text">
+            <string>Current Value(s):</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QLineEdit" name="leInputCurrentValues">
+           <property name="toolTip">
+            <string>Value to be replaced or removed (use space as separator)</string>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="lbInputNewValues">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="toolTip">
+            <string>New value(s) to add or replace current value (use space as separator)</string>
+           </property>
+           <property name="text">
+            <string>New Value(s):</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QLineEdit" name="leInputNewValues">
+           <property name="toolTip">
+            <string>New value(s) to add or replace current value (use space as separator)</string>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="0">
+          <widget class="QLabel" name="lbInputPositions">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="toolTip">
+            <string>Positions to be replaced [use space as separator] (zero-based index)</string>
+           </property>
+           <property name="text">
+            <string>Position(s):</string>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="1">
+          <widget class="QLineEdit" name="leInputPositions">
+           <property name="toolTip">
+            <string>Positions to be replaced [use space as separator] (zero-based index)</string>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </item>
+         <item row="4" column="0">
+          <widget class="QLabel" name="lbInputDiffOldNewValue">
+           <property name="toolTip">
+            <string>Difference to adjust values by.
+
+For instance if the current value is 1 and you want it to become 3 (new value), you should input -2:
+
+1 (current value) - 3 (new value) = -2
+
+---
+
+You can also update multi dimensional values like &quot;1 2 3&quot;, type the difference here like &quot;-1 -1 -1&quot;. Result would be &quot;2 3 4&quot;.</string>
+           </property>
+           <property name="text">
+            <string>Diff between old and new value:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="4" column="1">
+          <widget class="QLineEdit" name="leInputDiffOldNewValue">
+           <property name="toolTip">
+            <string>Difference to adjust values by.
+
+For instance if the current value is 1 and you want it to become 3 (new value), you should input -2:
+
+1 (current value) - 3 (new value) = -2
+
+---
+
+You can also update multi dimensional values like &quot;1 2 3&quot;, type the difference here like &quot;-1 -1 -1&quot;. Result would be &quot;2 3 4&quot;.</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <spacer name="verticalSpacer_3">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>40</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="groupBox_3">
+      <property name="title">
+       <string>Options</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="QCheckBox" name="cbOptionsNoBackups">
+         <property name="toolTip">
+          <string>Don't make backups of XML files (faster processing)</string>
+         </property>
+         <property name="text">
+          <string>No Backups</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <spacer name="verticalSpacer_4">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>40</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="groupBox_4">
+      <property name="title">
+       <string>XmlTools Operation Command</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_5">
+       <item>
+        <widget class="QLineEdit" name="leOperationCommandGenCommand">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="toolTip">
+          <string>Command for XmlTools generated by this interface, you can copy it, to later input directly in XmlTools</string>
+         </property>
+         <property name="readOnly">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pbOperationCommandCopyToClipboard">
+         <property name="text">
+          <string>Copy to clipboard</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <spacer name="verticalSpacer_5">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>40</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_4">
+      <item>
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="pbPreviewOperation">
+        <property name="minimumSize">
+         <size>
+          <width>150</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Opens a windows which previews your operation. It does NOT make any changes to the input files.
+
+(only available when exists only one file as input)</string>
+        </property>
+        <property name="text">
+         <string>Preview Operation</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="pbApplyOperation">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Applies the operation to the input files</string>
+        </property>
+        <property name="text">
+         <string>Apply Operation</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.cpp
===================================================================
--- s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.cpp	(revision 1092)
+++ s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.cpp	(revision 1092)
@@ -0,0 +1,206 @@
+#include "xmltoolsinterfacecommandpreview.h"
+#include "ui_xmltoolsinterfacecommandpreview.h"
+
+XmlToolsInterfaceCommandPreview::XmlToolsInterfaceCommandPreview(const QString &currentFileLocation, const QString &previewFileLocation, QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::XmlToolsInterfaceCommandPreview)
+{
+    ui->setupUi(this);
+    this->setAttribute(Qt::WA_DeleteOnClose, true); //destroy itself once finished.
+
+    QFile currentFile(currentFileLocation);
+    currentFile.open(QIODevice::ReadOnly);
+
+    this->currentText = currentFile.readAll();
+
+    ui->teCurrentFileText->setText(this->currentText);
+
+    QFile previewFile(previewFileLocation);
+    previewFile.open(QIODevice::ReadOnly);
+
+    this->previewText = previewFile.readAll();
+
+    ui->tePreviewFileText->setText(this->previewText);
+
+    highlighterCurrentFile = new BasicXMLSyntaxHighlighter(ui->teCurrentFileText);
+    highlighterPreviewFile = new BasicXMLSyntaxHighlighter(ui->tePreviewFileText);
+
+    previewFile.close();
+    currentFile.close();
+
+    // Split and trim text of current and preview file
+    this->currentTextRows = this->currentText.split("\n");
+    this->previewTextRows = this->previewText.split("\n");
+
+    for(QString &currentTextRow : this->currentTextRows){
+        currentTextRow = currentTextRow.trimmed();
+    }
+    for(QString &previewTextRow : this->previewTextRows){
+        previewTextRow = previewTextRow.trimmed();
+    }
+
+
+    QString currentTextRowNumbers;
+    QString previewTextRowNumbers;
+
+    for(int i=0; i<this->currentTextRows.size(); i++){
+        currentTextRowNumbers += QString::number(i);
+        if(i < this->currentTextRows.size()-1){
+            currentTextRowNumbers += "\n";
+        }
+    }
+
+    for(int i=0; i<this->previewTextRows.size(); i++){
+        previewTextRowNumbers += QString::number(i);
+        if(i < this->previewTextRows.size()-1){
+            previewTextRowNumbers += "\n";
+        }
+    }
+
+    // Create line numbers QTextEdits
+    this->lineNumberDisplayCurrentFile = new LineNumberDisplay(ui->teCurrentFileText,this);
+    this->lineNumberDisplayPreviewFile = new LineNumberDisplay(ui->tePreviewFileText,this);
+
+    // Make line numbers background transparent (http://www.qtcentre.org/threads/12148-how-QTextEdit-transparent-to-his-parent-window)
+    this->lineNumberDisplayCurrentFile->viewport()->setAutoFillBackground(false);
+    this->lineNumberDisplayPreviewFile->viewport()->setAutoFillBackground(false);
+
+    // Add line numbers (at beginning of the horizontal layout)
+    this->ui->hlCurrentFileText->insertWidget(0,lineNumberDisplayCurrentFile);
+    this->ui->hlPreviewFileText->insertWidget(0,lineNumberDisplayPreviewFile);
+
+    // Save the default background color (OS dependent)
+    this->textEditDefaultBackgroundColor = QTextCursor(this->lineNumberDisplayCurrentFile->document()).charFormat().background();
+
+    highlightDifferences();
+
+    // Vertical scrollbars
+    connect(ui->teCurrentFileText->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarMoved(int)));
+    connect(ui->tePreviewFileText->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarMoved(int)));
+
+    // Horizontal scrollbars
+    connect(ui->teCurrentFileText->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(horizontalScrollbarMoved(int)));
+    connect(ui->tePreviewFileText->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(horizontalScrollbarMoved(int)));
+}
+
+void XmlToolsInterfaceCommandPreview::verticalScrollbarMoved(int value)
+{
+    if(ui->cbVerticalScrollbarsSynchronized->isChecked()){
+        if(ui->teCurrentFileText->verticalScrollBar()->sliderPosition() != value){
+            ui->teCurrentFileText->verticalScrollBar()->setSliderPosition(value);
+        }
+        else{
+            ui->tePreviewFileText->verticalScrollBar()->setSliderPosition(value);
+        }
+    }
+}
+
+void XmlToolsInterfaceCommandPreview::horizontalScrollbarMoved(int value)
+{
+    if(ui->cbHorizontalScrollbarsSynchronized->isChecked()){
+        if(ui->teCurrentFileText->horizontalScrollBar()->sliderPosition() != value){
+            ui->teCurrentFileText->horizontalScrollBar()->setSliderPosition(value);
+        }
+        else{
+            ui->tePreviewFileText->horizontalScrollBar()->setSliderPosition(value);
+        }
+    }
+}
+
+void XmlToolsInterfaceCommandPreview::on_cbWrapText_toggled(bool checked)
+{
+    QTextEdit::LineWrapMode wrappingMode;
+
+    if(checked){
+        wrappingMode = QTextEdit::WidgetWidth;
+        this->lineNumberDisplayCurrentFile->hide();
+        this->lineNumberDisplayPreviewFile->hide();
+    }
+    else{
+        wrappingMode = QTextEdit::NoWrap;
+        this->lineNumberDisplayCurrentFile->show();
+        this->lineNumberDisplayPreviewFile->show();
+    }
+
+    ui->teCurrentFileText->setLineWrapMode(wrappingMode);
+    ui->tePreviewFileText->setLineWrapMode(wrappingMode);
+}
+
+void XmlToolsInterfaceCommandPreview::highlightDifferences(){
+
+    QTextCharFormat fmt;
+    QTextCursor cursor;
+
+    for(int i=0; i<currentTextRows.size(); i++){
+        if(i < this->previewTextRows.size()){
+            if(this->currentTextRows.at(i) != this->previewTextRows.at(i)){
+                fmt.setBackground(QColor(0xFFC864)); // orange color
+
+                cursor = QTextCursor(ui->teCurrentFileText->document());
+                cursor.setPosition(ui->teCurrentFileText->document()->findBlockByLineNumber(i).position());
+                cursor.select(QTextCursor::LineUnderCursor);
+                cursor.setCharFormat(fmt);
+
+                fmt.setBackground(Qt::yellow);
+
+                cursor = QTextCursor(ui->tePreviewFileText->document());
+                cursor.setPosition(ui->tePreviewFileText->document()->findBlockByLineNumber(i).position());
+                cursor.select(QTextCursor::LineUnderCursor);
+                cursor.setCharFormat(fmt);
+            }
+        }
+        else{ // if we have more rows in the current file than in the preview file we highlight the the extra rows in the current file
+            fmt.setBackground(QColor(0xFFC864)); // orange color
+
+            QTextCursor cursor(ui->teCurrentFileText->document());
+            cursor.setPosition(ui->teCurrentFileText->document()->findBlockByLineNumber(i).position());
+            cursor.select(QTextCursor::LineUnderCursor);
+            cursor.setCharFormat(fmt);
+        }
+    }
+
+    // if we have less rows in the current file than in the preview file we highlight the the extra rows in the preview file
+    if(this->currentTextRows.size() < this->previewTextRows.size()){
+        for(int i=this->currentTextRows.size(); i<this->previewTextRows.size(); i++){
+            fmt.setBackground(Qt::yellow);
+
+            cursor = QTextCursor(ui->tePreviewFileText->document());
+            cursor.setPosition(ui->tePreviewFileText->document()->findBlockByLineNumber(i).position());
+            cursor.select(QTextCursor::LineUnderCursor);
+            cursor.setCharFormat(fmt);
+        }
+    }
+
+    highlighterPreviewFile->rehighlight();
+    highlighterCurrentFile->rehighlight();
+}
+
+XmlToolsInterfaceCommandPreview::~XmlToolsInterfaceCommandPreview()
+{
+    delete this->highlighterCurrentFile;
+    delete this->highlighterPreviewFile;
+    delete this->lineNumberDisplayCurrentFile;
+    delete this->lineNumberDisplayPreviewFile;
+    delete this->ui;
+}
+
+
+
+void XmlToolsInterfaceCommandPreview::on_checkBox_toggled(bool checked)
+{
+    if(checked){
+        highlightDifferences();
+    }
+    else{
+        QTextCursor cursor(ui->teCurrentFileText->document());
+        QTextCharFormat fmt;
+        fmt.setBackground(this->textEditDefaultBackgroundColor);
+
+        cursor.select(QTextCursor::Document);
+        cursor.setCharFormat(fmt);
+
+        cursor = QTextCursor(ui->tePreviewFileText->document());
+        cursor.select(QTextCursor::Document);
+        cursor.setCharFormat(fmt);
+    }
+}
Index: s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.h
===================================================================
--- s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.h	(revision 1092)
+++ s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.h	(revision 1092)
@@ -0,0 +1,44 @@
+#ifndef XMLTOOLSINTERFACECOMMANDPREVIEW_H
+#define XMLTOOLSINTERFACECOMMANDPREVIEW_H
+
+#include <QMainWindow>
+#include <QFile>
+#include <QScrollBar>
+
+#include "../libs/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.h"
+#include "../libs/LineNumberDisplay/LineNumberDisplay.h"
+#include "util.h"
+
+namespace Ui {
+class XmlToolsInterfaceCommandPreview;
+}
+
+class XmlToolsInterfaceCommandPreview : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit XmlToolsInterfaceCommandPreview(const QString &currentFileLocation, const QString &previewFileLocation, QWidget *parent = 0);
+    ~XmlToolsInterfaceCommandPreview();
+
+private:
+    Ui::XmlToolsInterfaceCommandPreview *ui;
+    BasicXMLSyntaxHighlighter *highlighterCurrentFile;
+    BasicXMLSyntaxHighlighter *highlighterPreviewFile;
+    LineNumberDisplay *lineNumberDisplayCurrentFile;
+    LineNumberDisplay *lineNumberDisplayPreviewFile;
+    QString currentText;
+    QString previewText;
+    QStringList currentTextRows;
+    QStringList previewTextRows;
+    QBrush textEditDefaultBackgroundColor;
+
+private slots:
+    void verticalScrollbarMoved(int value);
+    void horizontalScrollbarMoved(int value);
+    void on_cbWrapText_toggled(bool checked);
+    void highlightDifferences();
+    void on_checkBox_toggled(bool checked);
+};
+
+#endif // XMLTOOLSINTERFACECOMMANDPREVIEW_H
Index: s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.ui
===================================================================
--- s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.ui	(revision 1092)
+++ s10k/Vago/xmlToolsInterface/xmltoolsinterfacecommandpreview.ui	(revision 1092)
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>XmlToolsInterfaceCommandPreview</class>
+ <widget class="QMainWindow" name="XmlToolsInterfaceCommandPreview">
+  <property name="windowModality">
+   <enum>Qt::ApplicationModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>600</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>XmlTools command preview</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="../resources.qrc">
+    <normaloff>:/new/icons/xmltoolsinterface.png</normaloff>:/new/icons/xmltoolsinterface.png</iconset>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QVBoxLayout" name="verticalLayout_3">
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_5">
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QLabel" name="label">
+          <property name="text">
+           <string>Original File:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="hlCurrentFileText">
+          <property name="spacing">
+           <number>0</number>
+          </property>
+          <item>
+           <widget class="QTextEdit" name="teCurrentFileText">
+            <property name="lineWrapMode">
+             <enum>QTextEdit::NoWrap</enum>
+            </property>
+            <property name="readOnly">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <item>
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>Changed File:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="hlPreviewFileText">
+          <property name="spacing">
+           <number>0</number>
+          </property>
+          <item>
+           <widget class="QTextEdit" name="tePreviewFileText">
+            <property name="lineWrapMode">
+             <enum>QTextEdit::NoWrap</enum>
+            </property>
+            <property name="readOnly">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="groupBox">
+      <property name="title">
+       <string>Options</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_4">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QCheckBox" name="checkBox">
+           <property name="text">
+            <string>Highlight differences</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="cbWrapText">
+           <property name="text">
+            <string>Wrap Text (hides line numbers)</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="QCheckBox" name="cbVerticalScrollbarsSynchronized">
+           <property name="text">
+            <string>Vertical scrollbars synchronized</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="cbHorizontalScrollbarsSynchronized">
+           <property name="text">
+            <string>Horizontal scrollbars synchronized</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
Index: s10k/Vago/xmlprocessor.cpp
===================================================================
--- s10k/Vago/xmlprocessor.cpp	(revision 1092)
+++ s10k/Vago/xmlprocessor.cpp	(revision 1092)
@@ -0,0 +1,46 @@
+#include "xmlprocessor.h"
+
+XmlProcessor::XmlProcessor(QString AppDir, Logger *myLogger, QStringList *commands)
+{
+    this->AppDir=AppDir;
+    this->myLogger=myLogger;
+    this->commands=commands;
+}
+
+void XmlProcessor::run()
+{
+    QProcess myProcess;
+    QString result = QString();
+    QString errorMessage = "";
+    int numErrors=0;
+
+    myProcess.setWorkingDirectory(this->AppDir);
+
+    for(int i=0; i<this->commands->size(); i++){
+
+        myProcess.start(UtilVago::getXmlToolsExecutable() +" "+this->commands->at(i));
+        myProcess.waitForFinished(-1);
+        result=myProcess.readAllStandardError();
+
+        if(!result.isEmpty()){
+            //catch exception
+            myLogger->writeString("Xml Tools Error: \n"+this->commands->at(i)+"\n"+result);
+            errorMessage=result;
+            numErrors++;
+        }
+
+    }
+
+    this->commands->clear(); //clean list
+
+    //let's cut it a bit, complete error is in log file.
+    if(errorMessage.size()>600){
+        //limit it at 400 characters (not counting the warning at the begin)
+        errorMessage.remove(299,errorMessage.size()-600);
+        errorMessage.insert(299,"\n \t ... \n");
+        errorMessage.insert(0,"This error was been shortened. \nSee the complete error at Vago log file.\n\n");
+    }
+
+    emit resultConversion(errorMessage,numErrors);
+}
+
Index: s10k/Vago/xmlprocessor.h
===================================================================
--- s10k/Vago/xmlprocessor.h	(revision 1092)
+++ s10k/Vago/xmlprocessor.h	(revision 1092)
@@ -0,0 +1,26 @@
+#ifndef XMLCOMMAND_H
+#define XMLCOMMAND_H
+#include <QProcess>
+#include <QThread>
+
+#include "utilvago.h"
+
+class XmlProcessor : public QThread
+{
+     Q_OBJECT
+public:
+    XmlProcessor(QString AppDir, Logger *myLogger, QStringList *commands);
+private:
+    QString AppDir;
+    Logger *myLogger;
+    QStringList *commands;
+
+protected:
+    void run(); //for thread
+signals:
+    void resultConversion(QString result, int numErrors);
+};
+
+
+
+#endif // XMLCOMMAND_H
