// JavascriptComV2_JQuery.js
//


Type.createNamespace('js.com.cs.v2.Classes.Forms.FileUploader');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress

js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress = function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress(variableName, baseURL, queryStringParameter) {
    /// <summary>
    /// In order to use this Upload Progress Bar, all you need to do is attach to 'Instance.UploadProgress'
    /// </summary>
    /// <param name="variableName" type="String">
    /// The variable name, or can be left null for default
    /// </param>
    /// <param name="baseURL" type="String">
    /// Base URL to call for upload progress. If left null defaults to '/uploadProgress.ashx'
    /// </param>
    /// <param name="queryStringParameter" type="String">
    /// Querystring paramenters, if left null defaults to 'uploadID'
    /// </param>
    /// <field name="_Instance" type="js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress" static="true">
    /// </field>
    /// <field name="showProgressBar" type="Boolean">
    /// </field>
    /// <field name="started" type="Boolean">
    /// </field>
    /// <field name="_RequireFilledFileUploads" type="Boolean">
    /// </field>
    /// <field name="_CheckFileUploadsInAllDocument" type="Boolean">
    /// </field>
    /// <field name="checkProgressInterval" type="Number" integer="true">
    /// </field>
    /// <field name="_variableName" type="String">
    /// </field>
    /// <field name="_baseURL" type="String">
    /// </field>
    /// <field name="_queryStringParameter" type="String">
    /// </field>
    /// <field name="_progressIDElementName" type="String">
    /// This is the ID of the textbox that will contain the upload ID GUID
    /// </field>
    /// <field name="functionToCallOnStart" type="DOMEventHandler">
    /// </field>
    /// <field name="_progressBar" type="Object">
    /// </field>
    /// <field name="__updateProgress" type="js.com.cs.v2.Classes.Forms.FileUploader.UploadProgressEventHandler">
    /// </field>
    this.set_checkFileUploadsInAllDocument(false);
    this.set_requireFilledFileUploads(true);
    if (!String.isNullOrEmpty(variableName)) {
        this._variableName = variableName;
    }
    if (!String.isNullOrEmpty(baseURL)) {
        this._baseURL = baseURL;
    }
    if (!String.isNullOrEmpty(queryStringParameter)) {
        this._queryStringParameter = queryStringParameter;
    }
    this._init();
}
js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.get_instance = function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$get_instance() {
    /// <value type="js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress"></value>
    if (js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress._Instance == null) {
        js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress._Instance = new js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress(null, null, null);
    }
    return js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress._Instance;
}
js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.prototype = {
    showProgressBar: false,
    started: false,
    _RequireFilledFileUploads: false,
    
    get_requireFilledFileUploads: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$get_requireFilledFileUploads() {
        /// <value type="Boolean"></value>
        return this._RequireFilledFileUploads;
    },
    set_requireFilledFileUploads: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$set_requireFilledFileUploads(value) {
        /// <value type="Boolean"></value>
        this._RequireFilledFileUploads = value;
        return value;
    },
    
    _CheckFileUploadsInAllDocument: false,
    
    get_checkFileUploadsInAllDocument: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$get_checkFileUploadsInAllDocument() {
        /// <value type="Boolean"></value>
        return this._CheckFileUploadsInAllDocument;
    },
    set_checkFileUploadsInAllDocument: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$set_checkFileUploadsInAllDocument(value) {
        /// <value type="Boolean"></value>
        this._CheckFileUploadsInAllDocument = value;
        return value;
    },
    
    checkProgressInterval: 1000,
    _variableName: 'js.com.cs.v2.Classes.Forms.FileUploader.get_instance()',
    _baseURL: '/uploadProgress.ashx',
    _queryStringParameter: 'uploadID',
    _progressIDElementName: 'uploadprogressbar_uploadid',
    functionToCallOnStart: null,
    _progressBar: null,
    
    checkRequirements: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$checkRequirements() {
        /// <summary>
        /// Checks whether there is at least one file upload filled in, in current form
        /// </summary>
        /// <returns type="Boolean"></returns>
        var elements = js.com.JQueryScriptSharp.jQueryUtil.select('input[type=\'file\']').get();
        var atLeastOne = true;
        if (this.get_requireFilledFileUploads()) {
            atLeastOne = false;
            for (var i = 0; i < elements.length; i++) {
                var elem = elements[i];
                var fileUpload = new js.com.cs.v2.Controls.Form.MyFileUpload(elem);
                var ok = false;
                if (!this.get_checkFileUploadsInAllDocument()) {
                    var field = fileUpload.getFieldFromFormsCollection();
                    if (!isNullOrUndefined(field)) {
                        var valGroup = field.validationGroup;
                        ok = (valGroup === js.com.cs.v2.UI.Forms.FormsCollection.get_instance().currentForm.validationGroup);
                    }
                }
                if (ok) {
                    if (!String.isNullOrEmpty(fileUpload.get_text())) {
                        atLeastOne = true;
                        break;
                    }
                }
            }
        }
        return atLeastOne;
    },
    
    updateFormAction: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$updateFormAction(form) {
        /// <summary>
        /// Updates the forms action to reflect the progress ID GUID
        /// </summary>
        /// <param name="form" type="js.com.cs.v2.UI.Forms.Form">
        /// </param>
        var txt = new js.com.cs.v2.Controls.Form.MyTextBoxHidden(this._progressIDElementName);
        if (txt != null && form.formElement.checkIfFormContainsFilledFileUploads()) {
            var action = form.formElement.get_action();
            var urlHandler = new js.com.cs.v2.Classes.URL.URLHandler(action);
            urlHandler.set_item(this._queryStringParameter, txt.get_text());
            var newUrl = urlHandler.toString();
            form.formElement.set_action(newUrl);
        }
    },
    
    _init: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$_init() {
    },
    
    add_updateProgress: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$add_updateProgress(value) {
        /// <param name="value" type="Function" />
        this.__updateProgress = Delegate.combine(this.__updateProgress, value);
    },
    remove_updateProgress: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$remove_updateProgress(value) {
        /// <param name="value" type="Function" />
        this.__updateProgress = Delegate.remove(this.__updateProgress, value);
    },
    
    __updateProgress: null,
    
    _getUploadProgressURL: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$_getUploadProgressURL() {
        /// <returns type="String"></returns>
        var d = new Date();
        var ts = d.getTime().toString();
        var txt = new js.com.cs.v2.Controls.Form.MyTextBoxHidden(this._progressIDElementName);
        var url = this._baseURL + '?' + this._queryStringParameter + '=' + txt.get_text() + ' &ts=' + ts;
        return url;
    },
    
    _uploadProgress_GetStatus: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus() {
        jQuery.get(this._getUploadProgressURL(), null, Delegate.create(this, this._uploadProgress_GetStatus_OnLoad), 'xml');
    },
    
    _uploadProgress_GetStatus_OnError: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus_OnError(obj, str) {
        /// <param name="obj" type="Object">
        /// </param>
        /// <param name="str" type="String">
        /// </param>
        window.setTimeout(Delegate.create(this, this._uploadProgress_GetStatus), this.checkProgressInterval);
    },
    
    _uploadProgress_GetStatus_OnLoad: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus_OnLoad(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var res = data;
        var progress = 0;
        var filename = '';
        var byteFrom = 0;
        var byteTotal = 0;
        var sEmpty = 'false';
        if (res.documentElement.attributes.getNamedItem('empty') != null) {
            sEmpty = res.documentElement.attributes.getNamedItem('empty').text;
        }
        if (sEmpty === 'true') {
        }
        else {
            progress = parseFloat(res.documentElement.attributes.getNamedItem('progress').text);
            byteFrom = parseFloat(res.documentElement.attributes.getNamedItem('bytes').text);
            byteTotal = parseFloat(res.documentElement.attributes.getNamedItem('size').text);
            filename = res.documentElement.attributes.getNamedItem('file').text;
            if (this.__updateProgress != null) {
                this.__updateProgress.invoke(progress, byteFrom, byteTotal, filename);
            }
        }
        if (progress < 100) {
            window.setTimeout(Delegate.create(this, this._uploadProgress_GetStatus), this.checkProgressInterval);
        }
    },
    
    start: function js_com_cs_v2_Classes_Forms_FileUploader_UploadProgress$start() {
        if (this.checkRequirements()) {
            this.started = true;
            this._uploadProgress_GetStatus();
            if (this.functionToCallOnStart != null) {
                this.functionToCallOnStart.invoke();
            }
        }
    }
}


Type.createNamespace('js.com.cs.v2.Classes.Forms.linkedMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu

js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu = function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu(root) {
    /// <param name="root" type="js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel">
    /// </param>
    /// <field name="_cmbs" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// List of [LinkedMenuComboBox]
    /// </field>
    /// <field name="_root" type="js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel">
    /// </field>
    /// <field name="cssDisabled" type="String">
    /// </field>
    this._cmbs = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    this._root = root;
}
js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu.prototype = {
    _root: null,
    cssDisabled: null,
    
    _parseCmbs: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu$_parseCmbs(cmbs) {
        /// <param name="cmbs" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < cmbs.get_length(); i++) {
            var cmb = cmbs.get_item(i);
            if (Type.canCast(cmb, String)) {
                var cmbID = cmb;
                cmb = document.getElementById(cmbID);
                if (cmb == null) {
                    alert('com.cs.forms.LinkedMenu: The combo box with id \'' + cmbID + '\' cannot be found in DOM.');
                }
                this._cmbs.push(new js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox(new js.com.cs.v2.Controls.Form.MyDropDownList(cmb), i, this, '', '0'));
            }
        }
    },
    
    _enableAllLevels: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu$_enableAllLevels() {
        for (var i = 0; i < this._cmbs.get_length(); i++) {
            var cmb = this._cmbs.get_item(i);
            cmb.enable();
        }
    },
    
    disableOtherLevels: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu$disableOtherLevels(levelIndex) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        for (var i = levelIndex + 1; i < this._cmbs.get_length(); i++) {
            var cmb = this._cmbs.get_item(i);
            cmb.disable();
        }
    },
    
    populateLevel: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu$populateLevel(levelIndex, linkedMenuLevels) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        /// <param name="linkedMenuLevels" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
        /// List of [LinkedMenuLevel]
        /// </param>
        this._enableAllLevels();
        if (levelIndex >= this._cmbs.get_length()) {
            alert('com.cs.forms.LinkedMenu: Please specify a combo box for level ' + (levelIndex + 1) + ' because at the moment only ' + this._cmbs.get_length() + ' level(s) are specified');
        }
        var cmb = this._cmbs.get_item(levelIndex);
        var hasGotSubLevels = cmb.populate(linkedMenuLevels);
        if (!hasGotSubLevels) {
            this.disableOtherLevels(levelIndex);
        }
    },
    
    initMenu: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu$initMenu() {
        /// <summary>
        /// Initialises the menu
        /// </summary>
        this.populateLevel(0, this._root.children);
    },
    
    addComboBox: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenu$addComboBox(cmb, disabledText, disabledValue) {
        /// <param name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
        /// </param>
        /// <param name="disabledText" type="String">
        /// </param>
        /// <param name="disabledValue" type="String">
        /// </param>
        var cmbBox = new js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox(cmb, this._cmbs.get_length(), this, disabledText, disabledValue);
        this._cmbs.push(cmbBox);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox

js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox = function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox(cmb, levelIndex, linkedMenu, disabledText, disabledValue) {
    /// <param name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
    /// </param>
    /// <param name="levelIndex" type="Number" integer="true">
    /// </param>
    /// <param name="linkedMenu" type="js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu">
    /// </param>
    /// <param name="disabledText" type="String">
    /// </param>
    /// <param name="disabledValue" type="String">
    /// </param>
    /// <field name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="linkedMenu" type="js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu">
    /// </field>
    /// <field name="disabledText" type="String">
    /// </field>
    /// <field name="disabledValue" type="String">
    /// </field>
    /// <field name="_currentValue" type="String">
    /// </field>
    /// <field name="_initiallyDisabled" type="Boolean">
    /// </field>
    /// <field name="linkedMenuLevels" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// List of [LinkedMenuLevel]
    /// </field>
    this.linkedMenuLevels = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    this.levelIndex = levelIndex;
    this.disabledValue = disabledValue;
    if (String.isNullOrEmpty(this.disabledValue)) {
        this.disabledValue = this.disabledText;
    }
    this.cmb = cmb;
    this.linkedMenu = linkedMenu;
    this.disabledText = disabledText;
    this._initiallyDisabled = cmb.get_disabled();
    this._init();
}
js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox.prototype = {
    cmb: null,
    levelIndex: 0,
    linkedMenu: null,
    disabledText: null,
    disabledValue: null,
    _currentValue: null,
    _initiallyDisabled: false,
    
    _getLinkedMenuLevel: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$_getLinkedMenuLevel(value) {
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel"></returns>
        for (var i = 0; i < this.linkedMenuLevels.get_length(); i++) {
            var level = this.linkedMenuLevels.get_item(i);
            if (level.option.value === value) {
                return level;
            }
        }
        return null;
    },
    
    _onChange: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$_onChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var value = this.cmb.get_text();
        if (value === this._currentValue) {
            return;
        }
        this._currentValue = value;
        this.cmb.callChange();
        var level = this._getLinkedMenuLevel(value);
        if (level.children.get_length() > 0) {
            this.linkedMenu.populateLevel(this.levelIndex + 1, level.children);
        }
        else {
            this.linkedMenu.disableOtherLevels(this.levelIndex);
        }
    },
    
    _initHandlers: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$_initHandlers() {
        this.cmb.add_onChange(Delegate.create(this, this._onChange));
        this.cmb.add_onKeyUp(Delegate.create(this, this._onChange));
    },
    
    _clearItems: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$_clearItems() {
        this.cmb.clearItems();
    },
    
    _init: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$_init() {
        this._clearItems();
        this._initHandlers();
    },
    
    enable: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$enable() {
        if (this._initiallyDisabled) {
            return;
        }
        this.cmb.enable();
        this.cmb.get_style().backgroundColor = null;
        this.cmb.removeClass(this.linkedMenu.cssDisabled);
    },
    
    disable: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$disable() {
        if (this._initiallyDisabled) {
            return;
        }
        this.cmb.disable();
        this._clearItems();
        this.cmb.addItem(this.disabledText, this.disabledValue);
        this.cmb.addClass(this.linkedMenu.cssDisabled);
    },
    
    populate: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuComboBox$populate(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
        /// </param>
        /// <returns type="Boolean"></returns>
        this._clearItems();
        this.linkedMenuLevels = linkedMenuLevels;
        var selectedLevel = null;
        var selectedLevelIndex = -1;
        var hasGotSubLevels = false;
        for (var i = 0; i < linkedMenuLevels.get_length(); i++) {
            var level = linkedMenuLevels.get_item(i);
            var opt = level.option;
            this.cmb.addItemFromOption(opt);
            if (level.selected && selectedLevel == null) {
                selectedLevel = level;
                selectedLevelIndex = i;
            }
        }
        if (selectedLevel == null && linkedMenuLevels.get_length() > 0) {
            selectedLevel = linkedMenuLevels.get_item(0);
            selectedLevelIndex = 0;
        }
        if (selectedLevel.children.get_length() > 0) {
            this._currentValue = selectedLevel.option.value;
            this.linkedMenu.populateLevel(this.levelIndex + 1, selectedLevel.children);
            hasGotSubLevels = true;
        }
        this.cmb.set_selectedIndex(selectedLevelIndex);
        return hasGotSubLevels;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel

js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel = function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuLevel(title, value, selected) {
    /// <param name="title" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <param name="selected" type="Boolean">
    /// </param>
    /// <field name="option" type="Object" domElement="true">
    /// </field>
    /// <field name="selected" type="Boolean">
    /// </field>
    /// <field name="children" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// List of [LinkedMenuLevel]
    /// </field>
    this.children = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    this.option = document.createElement('option');
    this.option.text = title;
    this.option.value = value;
    this.selected = selected;
}
js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel.prototype = {
    option: null,
    selected: false,
    
    addSubLevel: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuLevel$addSubLevel(linkedMenuLevel) {
        /// <param name="linkedMenuLevel" type="js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel">
        /// </param>
        this.children.push(linkedMenuLevel);
    },
    
    addSubLevels: function js_com_cs_v2_Classes_Forms_linkedMenu_LinkedMenuLevel$addSubLevels(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < linkedMenuLevels.get_length(); i++) {
            this.addSubLevel(linkedMenuLevels.get_item(i));
        }
    }
}


Type.createNamespace('js.com.cs.v2.Classes.Forms.Validation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.Validation.CharsLimit

js.com.cs.v2.Classes.Forms.Validation.CharsLimit = function js_com_cs_v2_Classes_Forms_Validation_CharsLimit(txt, amtLimit, elemDisplayRemaining) {
    /// <param name="txt" type="js.com.cs.v2.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="_elemDisplayText$1" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    js.com.cs.v2.Classes.Forms.Validation.CharsLimit.constructBase(this, [ txt, amtLimit, elemDisplayRemaining, false ]);
}
js.com.cs.v2.Classes.Forms.Validation.CharsLimit.prototype = {
    _elemDisplayText$1: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS

js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS = function js_com_cs_v2_Classes_Forms_Validation_VALIDATION_PARAMETERS() {
    /// <field name="isRequired" type="Boolean">
    /// </field>
    /// <field name="isEmail" type="Boolean">
    /// </field>
    /// <field name="isNumber" type="Boolean">
    /// </field>
    /// <field name="positiveOnly" type="Boolean">
    /// </field>
    /// <field name="isWebsite" type="Boolean">
    /// </field>
    /// <field name="negativeOnly" type="Boolean">
    /// </field>
    /// <field name="integersOnly" type="Boolean">
    /// </field>
    /// <field name="numFrom" type="Number">
    /// </field>
    /// <field name="numTo" type="Number">
    /// </field>
    /// <field name="dateFrom" type="Date">
    /// </field>
    /// <field name="dateTo" type="Date">
    /// </field>
    /// <field name="isCurrency" type="Boolean">
    /// </field>
    /// <field name="currencySymbol" type="String">
    /// </field>
    /// <field name="isCreditCardNumber" type="Boolean">
    /// </field>
    /// <field name="isIPAddress" type="Boolean">
    /// </field>
    /// <field name="isDate" type="Boolean">
    /// </field>
    /// <field name="valueCaseSensitive" type="Boolean">
    /// </field>
    /// <field name="doNotValidateOnBlur" type="Boolean">
    /// </field>
    /// <field name="dateFormat" type="String">
    /// </field>
    /// <field name="minLength" type="Number" integer="true">
    /// </field>
    /// <field name="maxLength" type="Number" integer="true">
    /// </field>
    /// <field name="initialEmptyText" type="String">
    /// </field>
    /// <field name="fileExtensionsAllowed" type="Array" elementType="String">
    /// A comma-seperated string of file extensions allowed, e.g gif, bmp, tif...
    /// </field>
    /// <field name="maxWords" type="Number" integer="true">
    /// </field>
    /// <field name="isAlphaNumeric" type="Boolean">
    /// </field>
    /// <field name="valueIn" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// </field>
    /// <field name="valueNotIn" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// </field>
    /// <field name="regExpPattern" type="RegExp">
    /// </field>
    this.valueIn = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    this.valueNotIn = new js.com.cs.v2.Classes.General.Arrays.MyArray();
}
js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS.prototype = {
    isRequired: false,
    isEmail: false,
    isNumber: false,
    positiveOnly: false,
    isWebsite: false,
    negativeOnly: false,
    integersOnly: false,
    numFrom: null,
    numTo: null,
    dateFrom: null,
    dateTo: null,
    isCurrency: false,
    currencySymbol: '\ufffd',
    isCreditCardNumber: false,
    isIPAddress: false,
    isDate: false,
    valueCaseSensitive: false,
    doNotValidateOnBlur: false,
    dateFormat: 'dd/MM/y',
    minLength: 0,
    maxLength: 0,
    initialEmptyText: null,
    fileExtensionsAllowed: null,
    maxWords: 0,
    isAlphaNumeric: false,
    regExpPattern: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG

js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG = function js_com_cs_v2_Classes_Forms_Validation_OUTPUT_ERROR_MSG() {
    /// <field name="errorMessage" type="String">
    /// </field>
}
js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG.prototype = {
    errorMessage: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.Validation.Validation

js.com.cs.v2.Classes.Forms.Validation.Validation = function js_com_cs_v2_Classes_Forms_Validation_Validation() {
}
js.com.cs.v2.Classes.Forms.Validation.Validation.containCharactersWhichAreNot = function js_com_cs_v2_Classes_Forms_Validation_Validation$containCharactersWhichAreNot(str, allowedCharsPattern) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="allowedCharsPattern" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!isNullOrUndefined(allowedCharsPattern)) {
        var r = new RegExp('[^' + allowedCharsPattern + ']+');
        return r.test(str);
    }
    return true;
}
js.com.cs.v2.Classes.Forms.Validation.Validation.containOnlyCharacters = function js_com_cs_v2_Classes_Forms_Validation_Validation$containOnlyCharacters(str, allowedCharsPattern) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="allowedCharsPattern" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return !js.com.cs.v2.Classes.Forms.Validation.Validation.containCharactersWhichAreNot(str, allowedCharsPattern);
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isEmail = function js_com_cs_v2_Classes_Forms_Validation_Validation$isEmail(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var regExp = new RegExp('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$');
    var ok = regExp.test(str);
    var regExp2 = new RegExp('\\.\\.');
    if (ok && regExp2.test(str)) {
        ok = false;
    }
    return ok;
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isWebsite = function js_com_cs_v2_Classes_Forms_Validation_Validation$isWebsite(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var regEx = new RegExp('^(https?://)?[a-zA-Z0-9.-_]+\\.[a-zA-Z]{2-7}$');
    var ok = false;
    ok = true;
    return ok;
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isNumber = function js_com_cs_v2_Classes_Forms_Validation_Validation$isNumber(str, parameters, outErrorMsg, itemTitle) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <param name="outErrorMsg" type="js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG">
    /// </param>
    /// <param name="itemTitle" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var ok = true;
    if (isNullOrUndefined(itemTitle)) {
        itemTitle = 'Number';
    }
    var regExpNum = new RegExp('^[-+]?[0-9]*$|^[-+]?[0-9]*\\.[0-9]*$');
    var isNum = regExpNum.test(str);
    if (isNum) {
        var num = parseFloat(str);
        if (!isNullOrUndefined(parameters) && (!isNullOrUndefined(parameters.numFrom) || !isNullOrUndefined(parameters.numTo))) {
            if (isNullOrUndefined(parameters.numFrom)) {
                parameters.numFrom = Number.NEGATIVE_INFINITY;
            }
            if (isNullOrUndefined(parameters.numTo)) {
                parameters.numTo = Number.POSITIVE_INFINITY;
            }
            var from = Math.min(parameters.numFrom, parameters.numTo);
            var to = Math.max(parameters.numFrom, parameters.numTo);
            if (num < from || num > to) {
                if (from === Number.NEGATIVE_INFINITY) {
                    if (!isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = itemTitle + ' must be smaller than or equal to ' + to;
                    }
                }
                else if (to === Number.POSITIVE_INFINITY) {
                    if (!isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = itemTitle + ' must be greater than or equal to ' + from;
                    }
                }
                else {
                    if (!isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = itemTitle + ' must be greater than or equal to ' + from + ' and smaller than or equal to ' + to;
                    }
                }
                return false;
            }
        }
        if (ok && !isNullOrUndefined(parameters)) {
            if (parameters.positiveOnly && num < 0) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be positive';
                }
                return false;
            }
            if (parameters.negativeOnly && num > 0) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be negative';
                }
                return false;
            }
            if (parameters.integersOnly && parseInt(num) !== num) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be a whole number';
                }
                return false;
            }
        }
    }
    else {
        if (!isNullOrUndefined(outErrorMsg)) {
            outErrorMsg.errorMessage = itemTitle + ' - Invalid number';
        }
        return false;
    }
    return true;
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isAlphaNumeric = function js_com_cs_v2_Classes_Forms_Validation_Validation$isAlphaNumeric(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v2.Classes.Forms.Validation.Validation.containOnlyCharacters(str, 'a-zA-Z0-9_');
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isCreditCardNumber = function js_com_cs_v2_Classes_Forms_Validation_Validation$isCreditCardNumber(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var r = new RegExp('^[0-9]{15,16}$');
    return r.test(str);
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isDate = function js_com_cs_v2_Classes_Forms_Validation_Validation$isDate(str, parameters, outErrorMsg, itemTitle) {
    /// <summary>
    /// Requires 'dojo.date.locale'
    /// </summary>
    /// <param name="str" type="String">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <param name="outErrorMsg" type="js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG">
    /// </param>
    /// <param name="itemTitle" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!isNullOrUndefined(itemTitle)) {
        itemTitle = 'Date';
    }
    var dateFormat = parameters.dateFormat;
    if (String.isNullOrEmpty(dateFormat)) {
        dateFormat = 'dd/MM/yyyy';
    }
    var dateRegEx = new RegExp('[-.]', 'g');
    dateFormat = dateFormat.replace(dateRegEx, '/');
    var d = js.com.cs.v2.Util.DateUtil.parseStringToDate(str, dateFormat);
    if (!isNullOrUndefined(d)) {
        if (!isNullOrUndefined(parameters.dateFrom) && !isNullOrUndefined(parameters.dateTo)) {
            if (parameters.dateFrom > parameters.dateTo) {
                var tmp = parameters.dateFrom;
                parameters.dateFrom = parameters.dateTo;
                parameters.dateTo = tmp;
            }
            if (d < parameters.dateFrom || d > parameters.dateTo) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be between or equal to ' + js.com.cs.v2.Util.DateUtil.formatDate(parameters.dateFrom, dateFormat) + ' and ' + js.com.cs.v2.Util.DateUtil.formatDate(parameters.dateTo, dateFormat);
                }
                return false;
            }
        }
        else {
            if (!isNullOrUndefined(parameters.dateFrom) && d < parameters.dateFrom) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be after or equal to ' + js.com.cs.v2.Util.DateUtil.formatDate(parameters.dateFrom, dateFormat);
                }
                return false;
            }
        }
    }
    else {
        if (!isNullOrUndefined(outErrorMsg)) {
            outErrorMsg.errorMessage = itemTitle + ' - Invalid Date.  Date must be in the format: ' + dateFormat.toLowerCase();
        }
        return false;
    }
    return true;
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isValueIn = function js_com_cs_v2_Classes_Forms_Validation_Validation$isValueIn(item, values, caseSensitive) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="values" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// </param>
    /// <param name="caseSensitive" type="Boolean">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!caseSensitive) {
        item = item.toLowerCase();
    }
    for (var i = 0; i < values.get_length(); i++) {
        var cmp = values.get_item(i).toString();
        if (!caseSensitive) {
            cmp = cmp.toLowerCase();
        }
        if (item === cmp) {
            return true;
        }
    }
    return false;
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isValueNotIn = function js_com_cs_v2_Classes_Forms_Validation_Validation$isValueNotIn(item, values, caseSensitive) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="values" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// </param>
    /// <param name="caseSensitive" type="Boolean">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v2.Classes.Forms.Validation.Validation.isValueIn(item, values, caseSensitive);
}
js.com.cs.v2.Classes.Forms.Validation.Validation.isIPAddress = function js_com_cs_v2_Classes_Forms_Validation_Validation$isIPAddress(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var r = new RegExp('^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$');
    return r.test(str);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.Validation.WordsLimit

js.com.cs.v2.Classes.Forms.Validation.WordsLimit = function js_com_cs_v2_Classes_Forms_Validation_WordsLimit(txt, amtLimit, elemDisplayRemaining) {
    /// <param name="txt" type="js.com.cs.v2.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="_elemDisplayText$1" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    js.com.cs.v2.Classes.Forms.Validation.WordsLimit.constructBase(this, [ txt, amtLimit, elemDisplayRemaining, true ]);
}
js.com.cs.v2.Classes.Forms.Validation.WordsLimit.prototype = {
    _elemDisplayText$1: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit

js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit = function js_com_cs_v2_Classes_Forms_Validation_WordsOrCharsLimit(txt, amtLimit, elemDisplayRemaining, words) {
    /// <param name="txt" type="js.com.cs.v2.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="words" type="Boolean">
    /// </param>
    /// <field name="_txt" type="js.com.cs.v2.Controls.Form.MyTextBox">
    /// </field>
    /// <field name="_amtLimit" type="Number" integer="true">
    /// </field>
    /// <field name="_words" type="Boolean">
    /// </field>
    /// <field name="_elemDisplayText" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="__onChange" type="js.com.cs.v2.Classes.Forms.Validation.AmtRemainingOnChangeHandler">
    /// </field>
    if (!(Type.canCast(txt, js.com.cs.v2.Controls.Form.MyTextBox))) {
        txt = js.com.cs.v2.Controls.Form.MyTextBox.getTextBoxFromElement(txt);
    }
    this._txt = txt;
    this._amtLimit = amtLimit;
    if (Type.canCast(elemDisplayRemaining, js.com.cs.v2.Controls.Common.MyDOMElement)) {
        this._elemDisplayText = elemDisplayRemaining;
    }
    else {
        this._elemDisplayText = new js.com.cs.v2.Controls.Common.MyDOMElement(elemDisplayRemaining);
    }
    if (isNullOrUndefined(words)) {
        words = true;
    }
    this._words = words;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit.prototype = {
    _txt: null,
    _amtLimit: 0,
    _words: false,
    _elemDisplayText: null,
    
    _update: function js_com_cs_v2_Classes_Forms_Validation_WordsOrCharsLimit$_update(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._words) {
            var words = js.com.cs.v2.Util.StringUtil.getWords(this._txt.get_text());
            var amtWords = words.get_length();
            var wordsRemaining = this._amtLimit - amtWords;
            if (wordsRemaining < 0) {
                var wordIndex = js.com.cs.v2.Util.StringUtil.getWordIndex(this._txt.get_text(), this._amtLimit);
                this._txt.set_text(this._txt.get_text().substring(0, wordIndex));
                wordsRemaining = 0;
            }
            var str = '<strong>' + wordsRemaining + '</strong> word';
            if (wordsRemaining !== 1) {
                str += 's';
            }
            str += ' remaining.';
            if (!isNullOrUndefined(this._elemDisplayText)) {
                this._elemDisplayText.set_innerHTML(str);
            }
            if (this.__onChange != null) {
                this.__onChange.invoke(wordsRemaining);
            }
        }
        else {
            var amtChars = this._txt.get_text().length;
            var charsRemaining = this._amtLimit - amtChars;
            charsRemaining = Math.max(0, charsRemaining);
            if (this._txt.get_text().length > this._amtLimit) {
                this._txt.set_text(this._txt.get_text().substring(0, this._amtLimit));
            }
            var str = '<strong>' + charsRemaining + '</strong> character';
            if (charsRemaining !== 1) {
                str += 's';
            }
            str += ' remaining.';
            if (!isNullOrUndefined(this._elemDisplayText)) {
                this._elemDisplayText.set_innerHTML(str);
            }
            if (this.__onChange != null) {
                this.__onChange.invoke(charsRemaining);
            }
        }
    },
    
    _init: function js_com_cs_v2_Classes_Forms_Validation_WordsOrCharsLimit$_init() {
        this._txt.add_onKeyUp(Delegate.create(this, this._update));
        this._txt.add_onChange(Delegate.create(this, this._update));
        this._update(null);
    },
    
    add_onChange: function js_com_cs_v2_Classes_Forms_Validation_WordsOrCharsLimit$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange = Delegate.combine(this.__onChange, value);
    },
    remove_onChange: function js_com_cs_v2_Classes_Forms_Validation_WordsOrCharsLimit$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange = Delegate.remove(this.__onChange, value);
    },
    
    __onChange: null
}


Type.createNamespace('js.com.cs.v2.Classes.General.Arrays');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.General.Arrays.MyArray

js.com.cs.v2.Classes.General.Arrays.MyArray = function js_com_cs_v2_Classes_General_Arrays_MyArray(array) {
    /// <param name="array" type="Array">
    /// </param>
    /// <field name="_array" type="Array">
    /// </field>
    if (array == null) {
        array = [];
    }
    this._array = array.clone();
}
js.com.cs.v2.Classes.General.Arrays.MyArray.prototype = {
    
    getBaseArray: function js_com_cs_v2_Classes_General_Arrays_MyArray$getBaseArray() {
        /// <returns type="Array"></returns>
        return this._array;
    },
    
    _array: null,
    
    push: function js_com_cs_v2_Classes_General_Arrays_MyArray$push(obj) {
        /// <param name="obj" type="Object">
        /// </param>
        this._array.push(obj);
    },
    
    pop: function js_com_cs_v2_Classes_General_Arrays_MyArray$pop() {
        this._array.pop();
    },
    
    _addRange: function js_com_cs_v2_Classes_General_Arrays_MyArray$_addRange(array) {
        /// <param name="array" type="Array">
        /// </param>
        for (var i = 0; i < array.length; i++) {
            this.push(array[i]);
        }
    },
    
    addRange: function js_com_cs_v2_Classes_General_Arrays_MyArray$addRange(array) {
        /// <param name="array" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < array.get_length(); i++) {
            this.push(array.get_item(i));
        }
    },
    
    _slice: function js_com_cs_v2_Classes_General_Arrays_MyArray$_slice(indexFrom, indexTo) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="indexTo" type="Number" integer="true">
        /// </param>
        /// <returns type="Array"></returns>
        var arr = this._array.slice(indexFrom, indexTo);
        return arr;
    },
    
    slice: function js_com_cs_v2_Classes_General_Arrays_MyArray$slice(indexFrom, indexTo) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="indexTo" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
        var arr = new js.com.cs.v2.Classes.General.Arrays.MyArray(this._slice(indexFrom, indexTo));
        return arr;
    },
    
    _spliceRemove: function js_com_cs_v2_Classes_General_Arrays_MyArray$_spliceRemove(indexFrom, howManyToRemove) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="howManyToRemove" type="Number" integer="true">
        /// </param>
        /// <returns type="Array"></returns>
        var arr = this._array.splice(indexFrom, howManyToRemove);
        return arr;
    },
    
    _spliceAdd: function js_com_cs_v2_Classes_General_Arrays_MyArray$_spliceAdd(indexFrom, objToAdd) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="objToAdd" type="Object">
        /// </param>
        /// <returns type="Array"></returns>
        var arr = this._array.splice(indexFrom, 0, objToAdd);
        return arr;
    },
    
    insertAt: function js_com_cs_v2_Classes_General_Arrays_MyArray$insertAt(index, obj) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="obj" type="Object">
        /// </param>
        this._spliceAdd(index, obj);
    },
    
    removeAt: function js_com_cs_v2_Classes_General_Arrays_MyArray$removeAt(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        this._spliceRemove(index, 1);
    },
    
    clear: function js_com_cs_v2_Classes_General_Arrays_MyArray$clear() {
        while (this.get_length() > 0) {
            this.removeAt(0);
        }
    },
    
    getItem: function js_com_cs_v2_Classes_General_Arrays_MyArray$getItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="Object"></returns>
        return this._array[index];
    },
    
    getLength: function js_com_cs_v2_Classes_General_Arrays_MyArray$getLength() {
        /// <returns type="Number" integer="true"></returns>
        return this._array.length;
    },
    
    getEnumerator: function js_com_cs_v2_Classes_General_Arrays_MyArray$getEnumerator() {
        /// <returns type="IEnumerator"></returns>
        return this._array.getEnumerator();
    },
    
    aggregate: function js_com_cs_v2_Classes_General_Arrays_MyArray$aggregate(seedValue, aggregator) {
        /// <param name="seedValue" type="Object">
        /// </param>
        /// <param name="aggregator" type="ArrayItemAggregator">
        /// </param>
        /// <returns type="Object"></returns>
        return this._array.aggregate(seedValue, aggregator);
    },
    
    clone: function js_com_cs_v2_Classes_General_Arrays_MyArray$clone() {
        /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        item._array = this._array.clone();
        return item;
    },
    
    concat: function js_com_cs_v2_Classes_General_Arrays_MyArray$concat(objects) {
        /// <param name="objects" type="Array" elementType="Object">
        /// </param>
        /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
        var item = this.clone();
        item._array.concat(objects);
        return item;
    },
    
    contains: function js_com_cs_v2_Classes_General_Arrays_MyArray$contains(item) {
        /// <param name="item" type="Object">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._array.contains(item);
    },
    
    every: function js_com_cs_v2_Classes_General_Arrays_MyArray$every(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._array.every(itemFilterCallback);
    },
    
    extract: function js_com_cs_v2_Classes_General_Arrays_MyArray$extract(index, count) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="count" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        item._array = this._array.extract(index, count);
        return item;
    },
    
    filter: function js_com_cs_v2_Classes_General_Arrays_MyArray$filter(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        item._array = this._array.filter(itemFilterCallback);
        return item;
    },
    
    forEach: function js_com_cs_v2_Classes_General_Arrays_MyArray$forEach(itemCallback) {
        /// <param name="itemCallback" type="ArrayItemCallback">
        /// </param>
        this._array.forEach(itemCallback);
    },
    
    indexOf: function js_com_cs_v2_Classes_General_Arrays_MyArray$indexOf(item) {
        /// <param name="item" type="Object">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._array.indexOf(item);
    },
    
    join: function js_com_cs_v2_Classes_General_Arrays_MyArray$join(delimiter) {
        /// <param name="delimiter" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._array.join(delimiter);
    },
    
    reverse: function js_com_cs_v2_Classes_General_Arrays_MyArray$reverse() {
        this._array.reverse();
    },
    
    some: function js_com_cs_v2_Classes_General_Arrays_MyArray$some(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._array.some(itemFilterCallback);
    },
    
    sort: function js_com_cs_v2_Classes_General_Arrays_MyArray$sort(compareCallback) {
        /// <param name="compareCallback" type="CompareCallback">
        /// </param>
        this._array.sort(compareCallback);
    },
    
    get_length: function js_com_cs_v2_Classes_General_Arrays_MyArray$get_length() {
        /// <value type="Number" integer="true"></value>
        return this._array.length;
    },
    get_item: function js_com_cs_v2_Classes_General_Arrays_MyArray$get_item(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        return this._array[index];
    },
    set_item: function js_com_cs_v2_Classes_General_Arrays_MyArray$set_item(index, value) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        this._array[index] = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.General.Arrays.MyArrayInt

js.com.cs.v2.Classes.General.Arrays.MyArrayInt = function js_com_cs_v2_Classes_General_Arrays_MyArrayInt(array) {
    /// <param name="array" type="Array">
    /// </param>
    js.com.cs.v2.Classes.General.Arrays.MyArrayInt.constructBase(this, [ array ]);
}
js.com.cs.v2.Classes.General.Arrays.MyArrayInt.prototype = {
    
    push: function js_com_cs_v2_Classes_General_Arrays_MyArrayInt$push(obj) {
        /// <param name="obj" type="Number" integer="true">
        /// </param>
        this._array.push(obj);
    },
    
    addRange: function js_com_cs_v2_Classes_General_Arrays_MyArrayInt$addRange(array) {
        /// <param name="array" type="js.com.cs.v2.Classes.General.Arrays.MyArrayInt">
        /// </param>
        for (var i = 0; i < array.get_length(); i++) {
            this.push(array.get_item(i));
        }
    },
    
    getItem: function js_com_cs_v2_Classes_General_Arrays_MyArrayInt$getItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._array[index];
    },
    get_item: function js_com_cs_v2_Classes_General_Arrays_MyArrayInt$get_item(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._array[index];
    },
    set_item: function js_com_cs_v2_Classes_General_Arrays_MyArrayInt$set_item(index, value) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        this._array[index] = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.General.Arrays.MyArrayString

js.com.cs.v2.Classes.General.Arrays.MyArrayString = function js_com_cs_v2_Classes_General_Arrays_MyArrayString(array) {
    /// <param name="array" type="Array">
    /// </param>
    js.com.cs.v2.Classes.General.Arrays.MyArrayString.constructBase(this, [ array ]);
}
js.com.cs.v2.Classes.General.Arrays.MyArrayString.prototype = {
    
    push: function js_com_cs_v2_Classes_General_Arrays_MyArrayString$push(obj) {
        /// <param name="obj" type="String">
        /// </param>
        this._array.push(obj);
    },
    
    addRange: function js_com_cs_v2_Classes_General_Arrays_MyArrayString$addRange(array) {
        /// <param name="array" type="js.com.cs.v2.Classes.General.Arrays.MyArrayString">
        /// </param>
        for (var i = 0; i < array.get_length(); i++) {
            this.push(array.get_item(i));
        }
    },
    
    getItem: function js_com_cs_v2_Classes_General_Arrays_MyArrayString$getItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="String"></returns>
        return this._array[index];
    },
    get_item: function js_com_cs_v2_Classes_General_Arrays_MyArrayString$get_item(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._array[index];
    },
    set_item: function js_com_cs_v2_Classes_General_Arrays_MyArrayString$set_item(index, value) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        this._array[index] = value;
        return value;
    }
}


Type.createNamespace('js.com.cs.v2.Classes.General');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.General.GeneralClass

js.com.cs.v2.Classes.General.GeneralClass = function js_com_cs_v2_Classes_General_GeneralClass() {
    /// <field name="_Body" type="js.com.cs.v2.Controls.Common.MyDOMElement" static="true">
    /// </field>
}
js.com.cs.v2.Classes.General.GeneralClass.getBody = function js_com_cs_v2_Classes_General_GeneralClass$getBody() {
    /// <returns type="js.com.cs.v2.Controls.Common.MyDOMElement"></returns>
    if (js.com.cs.v2.Classes.General.GeneralClass._Body == null) {
        js.com.cs.v2.Classes.General.GeneralClass._Body = new js.com.cs.v2.Controls.Common.MyDOMElement(document.body);
    }
    return js.com.cs.v2.Classes.General.GeneralClass._Body;
}
js.com.cs.v2.Classes.General.GeneralClass.getForms = function js_com_cs_v2_Classes_General_GeneralClass$getForms() {
    /// <returns type="Array" elementType="MyFormElement"></returns>
    var forms = document.forms;
    var a = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    for (var i = 0; i < forms.length; i++) {
        a.push(new js.com.cs.v2.Controls.Common.MyFormElement(forms[i]));
    }
    return a.getBaseArray();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.General.ListItem

js.com.cs.v2.Classes.General.ListItem = function js_com_cs_v2_Classes_General_ListItem(txt, value) {
    /// <param name="txt" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <field name="text" type="String">
    /// </field>
    /// <field name="value" type="String">
    /// </field>
    this.text = txt;
    this.value = value;
}
js.com.cs.v2.Classes.General.ListItem.prototype = {
    text: null,
    value: null,
    
    getOptionElement: function js_com_cs_v2_Classes_General_ListItem$getOptionElement() {
        /// <returns type="Object" domElement="true"></returns>
        var opt = document.createElement('option');
        opt.text = this.text;
        opt.value = this.value;
        return opt;
    }
}


Type.createNamespace('js.com.cs.v2.Classes.Geom');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Geom.Point

js.com.cs.v2.Classes.Geom.Point = function js_com_cs_v2_Classes_Geom_Point(x, y) {
    /// <param name="x" type="Number">
    /// </param>
    /// <param name="y" type="Number">
    /// </param>
    /// <field name="x" type="Number">
    /// </field>
    /// <field name="y" type="Number">
    /// </field>
    if (isNullOrUndefined(x)) {
        x = 0;
    }
    if (isNullOrUndefined(y)) {
        y = 0;
    }
    this.x = x;
    this.y = y;
}
js.com.cs.v2.Classes.Geom.Point.prototype = {
    x: 0,
    y: 0,
    
    add: function js_com_cs_v2_Classes_Geom_Point$add(pt) {
        /// <param name="pt" type="js.com.cs.v2.Classes.Geom.Point">
        /// </param>
        /// <returns type="js.com.cs.v2.Classes.Geom.Point"></returns>
        this.x += pt.x;
        this.y += pt.y;
        return this;
    }
}


Type.createNamespace('js.com.cs.v2.Classes');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.TimeSpan

js.com.cs.v2.Classes.TimeSpan = function js_com_cs_v2_Classes_TimeSpan(date) {
    /// <param name="date" type="Date">
    /// </param>
    /// <field name="_date" type="Date">
    /// </field>
    if (Type.canCast(date, Date)) {
        this._date = date;
    }
    else {
        this._date = new Date(date);
    }
}
js.com.cs.v2.Classes.TimeSpan.prototype = {
    _date: null,
    
    get_milliseconds: function js_com_cs_v2_Classes_TimeSpan$get_milliseconds() {
        /// <value type="Number" integer="true"></value>
        return this._date.getTime();
    },
    
    get_seconds: function js_com_cs_v2_Classes_TimeSpan$get_seconds() {
        /// <value type="Number"></value>
        return this.get_milliseconds() / 1000;
    },
    
    get_minutes: function js_com_cs_v2_Classes_TimeSpan$get_minutes() {
        /// <value type="Number"></value>
        return this.get_seconds() / 60;
    },
    
    get_hours: function js_com_cs_v2_Classes_TimeSpan$get_hours() {
        /// <value type="Number"></value>
        return this.get_minutes() / 60;
    },
    
    get_days: function js_com_cs_v2_Classes_TimeSpan$get_days() {
        /// <value type="Number"></value>
        return this.get_hours() / 24;
    },
    
    get_weeks: function js_com_cs_v2_Classes_TimeSpan$get_weeks() {
        /// <value type="Number"></value>
        return this.get_days() / 7;
    }
}


Type.createNamespace('js.com.cs.v2.Classes.URL');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.URL.QueryString

js.com.cs.v2.Classes.URL.QueryString = function js_com_cs_v2_Classes_URL_QueryString(querystring) {
    /// <param name="querystring" type="String">
    /// If left as null, the current URL is taken
    /// </param>
    /// <field name="_params" type="Object">
    /// </field>
    /// <field name="_querystring" type="String">
    /// </field>
    if (querystring == null) {
        querystring = window.location.toString();
    }
    querystring = js.com.cs.v2.Util.URLUtil.getQueryString(querystring);
    this._params = {};
    this._parseParams(querystring);
}
js.com.cs.v2.Classes.URL.QueryString.prototype = {
    _params: null,
    _querystring: null,
    
    _parseParams: function js_com_cs_v2_Classes_URL_QueryString$_parseParams(qs) {
        /// <param name="qs" type="String">
        /// </param>
        var nameValues = qs.split('&');
        for (var i = 0; i < nameValues.length; i++) {
            var data = nameValues[i].split('=');
            if (data.length >= 2) {
                var name = data[0];
                var value = data[1];
                this._params[name] = value;
            }
        }
    },
    
    toString: function js_com_cs_v2_Classes_URL_QueryString$toString() {
        /// <returns type="String"></returns>
        var s = '';
        var test = Object.getKeyCount(this._params);
        var $dict1 = this._params;
        for (var $key2 in $dict1) {
            var x = { key: $key2, value: $dict1[$key2] };
            if (s !== '') {
                s += '&';
            }
            var name = x.key;
            var value = x.value;
            s += name + '=' + value;
        }
        return s;
    },
    
    get_count: function js_com_cs_v2_Classes_URL_QueryString$get_count() {
        /// <value type="Number" integer="true"></value>
        return Object.getKeyCount(this._params);
    },
    get_item: function js_com_cs_v2_Classes_URL_QueryString$get_item(key) {
        /// <param name="key" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._params[key];
    },
    set_item: function js_com_cs_v2_Classes_URL_QueryString$set_item(key, value) {
        /// <param name="key" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        this._params[key] = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.URL.URLHandler

js.com.cs.v2.Classes.URL.URLHandler = function js_com_cs_v2_Classes_URL_URLHandler(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <field name="_paths" type="Array" elementType="String">
    /// </field>
    /// <field name="_queryString" type="js.com.cs.v2.Classes.URL.QueryString">
    /// </field>
    /// <field name="fromRoot" type="Boolean">
    /// </field>
    this.set_url(url);
}
js.com.cs.v2.Classes.URL.URLHandler.prototype = {
    
    toString: function js_com_cs_v2_Classes_URL_URLHandler$toString() {
        /// <returns type="String"></returns>
        return this.get_url();
    },
    
    _paths: null,
    
    get_paths: function js_com_cs_v2_Classes_URL_URLHandler$get_paths() {
        /// <value type="Array" elementType="String"></value>
        return this._paths;
    },
    set_paths: function js_com_cs_v2_Classes_URL_URLHandler$set_paths(value) {
        /// <value type="Array" elementType="String"></value>
        this._paths = value;
        return value;
    },
    
    _queryString: null,
    fromRoot: false,
    
    get_path: function js_com_cs_v2_Classes_URL_URLHandler$get_path() {
        /// <value type="String"></value>
        var s = '';
        if (this.fromRoot) {
            s += '/';
        }
        s += this._paths.join('/');
        return s;
    },
    set_path: function js_com_cs_v2_Classes_URL_URLHandler$set_path(value) {
        /// <value type="String"></value>
        this.fromRoot = false;
        if (value.startsWith('/')) {
            this.fromRoot = true;
            value = value.remove(0, 1);
        }
        this._paths = js.com.cs.v2.Util.URLUtil.removeQueryString(value).split('/');
        return value;
    },
    
    get_queryString: function js_com_cs_v2_Classes_URL_URLHandler$get_queryString() {
        /// <value type="js.com.cs.v2.Classes.URL.QueryString"></value>
        return this._queryString;
    },
    set_queryString: function js_com_cs_v2_Classes_URL_URLHandler$set_queryString(value) {
        /// <value type="js.com.cs.v2.Classes.URL.QueryString"></value>
        this._queryString = value;
        return value;
    },
    
    get_queryStringValue: function js_com_cs_v2_Classes_URL_URLHandler$get_queryStringValue() {
        /// <value type="String"></value>
        return this._queryString.toString();
    },
    set_queryStringValue: function js_com_cs_v2_Classes_URL_URLHandler$set_queryStringValue(value) {
        /// <value type="String"></value>
        this._queryString = new js.com.cs.v2.Classes.URL.QueryString(value);
        return value;
    },
    
    get_url: function js_com_cs_v2_Classes_URL_URLHandler$get_url() {
        /// <value type="String"></value>
        if (!String.isNullOrEmpty(this.get_queryStringValue())) {
            return this.get_path() + '?' + this.get_queryStringValue();
        }
        else {
            return this.get_path();
        }
    },
    set_url: function js_com_cs_v2_Classes_URL_URLHandler$set_url(value) {
        /// <value type="String"></value>
        this.set_queryStringValue(value);
        this.set_path(value);
        return value;
    },
    
    compareTo: function js_com_cs_v2_Classes_URL_URLHandler$compareTo(url) {
        /// <param name="url" type="js.com.cs.v2.Classes.URL.URLHandler">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.toString().toLowerCase() === url.toString().toLowerCase();
    },
    get_item: function js_com_cs_v2_Classes_URL_URLHandler$get_item(key) {
        /// <param name="key" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._queryString.get_item(key);
    },
    set_item: function js_com_cs_v2_Classes_URL_URLHandler$set_item(key, value) {
        /// <param name="key" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        this._queryString.set_item(key, value);
        return value;
    }
}


Type.createNamespace('js.com.cs.v2.Classes.Validation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS

js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS = function() { 
    /// <field name="hidden" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="loading" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="yes" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="no" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.prototype = {
    hidden: 1, 
    loading: 2, 
    yes: 4, 
    no: 8
}
js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.createEnum('js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Classes.Validation.ValueChecker

js.com.cs.v2.Classes.Validation.ValueChecker = function js_com_cs_v2_Classes_Validation_ValueChecker(formElement, txtHiddenFieldToUpdate, url) {
    /// <summary>
    /// Attached to a given form element, and makes an AJAX call to check the result (true/false)
    /// </summary>
    /// <param name="formElement" type="js.com.cs.v2.Controls.Form.MyBaseFormElement">
    /// </param>
    /// <param name="txtHiddenFieldToUpdate" type="js.com.cs.v2.Controls.Form.MyTextBoxHidden">
    /// </param>
    /// <param name="url" type="String">
    /// </param>
    /// <field name="__onChangedStatus" type="js.com.cs.v2.Classes.Validation.ChangedStatusDelegate">
    /// </field>
    /// <field name="formElement" type="js.com.cs.v2.Controls.Form.MyBaseFormElement">
    /// The form element which is checked each time a value changes
    /// </field>
    /// <field name="postURL" type="String">
    /// The URL to poast to
    /// </field>
    /// <field name="querystringValueParam" type="String">
    /// The name of the query string parameter on which to post the value
    /// </field>
    /// <field name="returnParamName" type="String">
    /// The name of the field in the object returned in the result
    /// </field>
    /// <field name="currentStatus" type="js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS">
    /// The current status, as of last check
    /// </field>
    /// <field name="_url" type="js.com.cs.v2.Classes.URL.URLHandler">
    /// </field>
    /// <field name="txtHiddenFieldToUpdate" type="js.com.cs.v2.Controls.Form.MyTextBoxHidden">
    /// </field>
    /// <field name="hiddenFieldValue_Yes" type="String">
    /// </field>
    /// <field name="hiddenFieldValue_No" type="String">
    /// </field>
    this.currentStatus = js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.hidden;
    this.txtHiddenFieldToUpdate = txtHiddenFieldToUpdate;
    this._url = new js.com.cs.v2.Classes.URL.URLHandler(url);
    this.formElement = formElement;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._onLoad));
}
js.com.cs.v2.Classes.Validation.ValueChecker.prototype = {
    
    add_onChangedStatus: function js_com_cs_v2_Classes_Validation_ValueChecker$add_onChangedStatus(value) {
        /// <summary>
        /// An event triggered when the status chagnes
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangedStatus = Delegate.combine(this.__onChangedStatus, value);
    },
    remove_onChangedStatus: function js_com_cs_v2_Classes_Validation_ValueChecker$remove_onChangedStatus(value) {
        /// <summary>
        /// An event triggered when the status chagnes
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangedStatus = Delegate.remove(this.__onChangedStatus, value);
    },
    
    __onChangedStatus: null,
    formElement: null,
    postURL: null,
    querystringValueParam: 'value',
    returnParamName: 'result',
    _url: null,
    txtHiddenFieldToUpdate: null,
    hiddenFieldValue_Yes: 'OK',
    hiddenFieldValue_No: '',
    
    _onLoad: function js_com_cs_v2_Classes_Validation_ValueChecker$_onLoad() {
        this.formElement.add_onChangeEvenWithKeys(Delegate.create(this, this._formElement_updated));
        this.formElement.add_onChange(Delegate.create(this, this._formElement_updated));
        this._formElement_updated(null);
    },
    
    _formElement_updated: function js_com_cs_v2_Classes_Validation_ValueChecker$_formElement_updated(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._url.set_item(this.querystringValueParam, this.formElement.get_value());
        this._changedStatus(js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.loading);
        jQuery.get(this._url.toString(), null, Delegate.create(this, this._checkResponse), 'json');
    },
    
    _changedStatus: function js_com_cs_v2_Classes_Validation_ValueChecker$_changedStatus(status) {
        /// <param name="status" type="js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS">
        /// </param>
        this.currentStatus = status;
        if (this.txtHiddenFieldToUpdate != null) {
            switch (status) {
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.hidden:
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.loading:
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.no:
                    this.txtHiddenFieldToUpdate.set_text(this.hiddenFieldValue_No);
                    break;
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.yes:
                    this.txtHiddenFieldToUpdate.set_text(this.hiddenFieldValue_Yes);
                    break;
            }
        }
        if (this.__onChangedStatus != null) {
            this.__onChangedStatus.invoke(this, this.currentStatus);
        }
    },
    
    _checkResponse: function js_com_cs_v2_Classes_Validation_ValueChecker$_checkResponse(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var returnVal = data[this.returnParamName];
        if (returnVal) {
            this._changedStatus(js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.yes);
        }
        else {
            this._changedStatus(js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.no);
        }
    }
}


Type.createNamespace('js.com.cs.v2.Controls.Common');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.IMyDOMElement

js.com.cs.v2.Controls.Common.IMyDOMElement = function() { 
};
js.com.cs.v2.Controls.Common.IMyDOMElement.prototype = {
    add_onBeforeUnload : null,
    remove_onBeforeUnload : null,
    add_onBlur : null,
    remove_onBlur : null,
    add_onChange : null,
    remove_onChange : null,
    add_onClick : null,
    remove_onClick : null,
    add_onDoubleClick : null,
    remove_onDoubleClick : null,
    add_onError : null,
    remove_onError : null,
    add_onFocus : null,
    remove_onFocus : null,
    add_onKeyDown : null,
    remove_onKeyDown : null,
    add_onKeyPress : null,
    remove_onKeyPress : null,
    add_onKeyUp : null,
    remove_onKeyUp : null,
    add_onLoad : null,
    remove_onLoad : null,
    add_onMouseDown : null,
    remove_onMouseDown : null,
    add_onMouseEnter : null,
    remove_onMouseEnter : null,
    add_onMouseLeave : null,
    remove_onMouseLeave : null,
    add_onMouseMove : null,
    remove_onMouseMove : null,
    add_onMouseOut : null,
    remove_onMouseOut : null,
    add_onMouseOver : null,
    remove_onMouseOver : null,
    add_onMouseUp : null,
    remove_onMouseUp : null,
    add_onReady : null,
    remove_onReady : null,
    add_onResize : null,
    remove_onResize : null,
    add_onScroll : null,
    remove_onScroll : null,
    add_onSelect : null,
    remove_onSelect : null,
    add_onSubmit : null,
    remove_onSubmit : null,
    add_onUnload : null,
    remove_onUnload : null,
    get_style : null,
    addClass : null,
    removeClass : null,
    toggleClass : null,
    get_myDomElement : null
}
js.com.cs.v2.Controls.Common.IMyDOMElement.createInterface('js.com.cs.v2.Controls.Common.IMyDOMElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.HREF_TARGET

js.com.cs.v2.Controls.Common.HREF_TARGET = function() { 
    /// <field name="blank" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="self" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="parent" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="top" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Controls.Common.HREF_TARGET.prototype = {
    blank: 0, 
    self: 1, 
    parent: 2, 
    top: 3
}
js.com.cs.v2.Controls.Common.HREF_TARGET.createEnum('js.com.cs.v2.Controls.Common.HREF_TARGET', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE

js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE = function() { 
    /// <field name="outerWidth" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="outerWidthIncludeMargin" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="width" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="outerHeight" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="outerHeightIncludeMargin" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="height" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="top" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.prototype = {
    outerWidth: 0, 
    outerWidthIncludeMargin: 1, 
    width: 2, 
    outerHeight: 3, 
    outerHeightIncludeMargin: 4, 
    height: 5, 
    top: 6, 
    left: 7
}
js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.createEnum('js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyAnchorElement

js.com.cs.v2.Controls.Common.MyAnchorElement = function js_com_cs_v2_Controls_Common_MyAnchorElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// </param>
    /// <field name="_target$1" type="js.com.cs.v2.Controls.Common.HREF_TARGET">
    /// </field>
    this._target$1 = js.com.cs.v2.Controls.Common.HREF_TARGET.self;
    js.com.cs.v2.Controls.Common.MyAnchorElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('a') : domElement ]);
}
js.com.cs.v2.Controls.Common.MyAnchorElement.targetToString = function js_com_cs_v2_Controls_Common_MyAnchorElement$targetToString(target) {
    /// <param name="target" type="js.com.cs.v2.Controls.Common.HREF_TARGET">
    /// </param>
    /// <returns type="String"></returns>
    switch (target) {
        case js.com.cs.v2.Controls.Common.HREF_TARGET.blank:
            return '_blank';
        case js.com.cs.v2.Controls.Common.HREF_TARGET.self:
            return '_self';
        case js.com.cs.v2.Controls.Common.HREF_TARGET.parent:
            return '_parent';
        case js.com.cs.v2.Controls.Common.HREF_TARGET.top:
            return '_top';
    }
    return null;
}
js.com.cs.v2.Controls.Common.MyAnchorElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyAnchorElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyAnchorElement.callBase(this, 'get_domElement');
    },
    
    get_href: function js_com_cs_v2_Controls_Common_MyAnchorElement$get_href() {
        /// <value type="String"></value>
        return this.get_domElement().href;
    },
    set_href: function js_com_cs_v2_Controls_Common_MyAnchorElement$set_href(value) {
        /// <value type="String"></value>
        this.get_domElement().href = value;
        return value;
    },
    
    get_target: function js_com_cs_v2_Controls_Common_MyAnchorElement$get_target() {
        /// <value type="js.com.cs.v2.Controls.Common.HREF_TARGET"></value>
        return this._target$1;
    },
    set_target: function js_com_cs_v2_Controls_Common_MyAnchorElement$set_target(value) {
        /// <value type="js.com.cs.v2.Controls.Common.HREF_TARGET"></value>
        this.get_domElement().target = js.com.cs.v2.Controls.Common.MyAnchorElement.targetToString(value);
        this._target$1 = value;
        return value;
    },
    
    get_text: function js_com_cs_v2_Controls_Common_MyAnchorElement$get_text() {
        /// <value type="String"></value>
        return this.get_domElement().innerText;
    },
    set_text: function js_com_cs_v2_Controls_Common_MyAnchorElement$set_text(value) {
        /// <value type="String"></value>
        this.get_domElement().innerText = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyDivElement

js.com.cs.v2.Controls.Common.MyDivElement = function js_com_cs_v2_Controls_Common_MyDivElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyDivElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('div') : domElement ]);
}
js.com.cs.v2.Controls.Common.MyDivElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyDivElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyDivElement.callBase(this, 'get_domElement');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyDOMElement

js.com.cs.v2.Controls.Common.MyDOMElement = function js_com_cs_v2_Controls_Common_MyDOMElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="_destroyed" type="Boolean">
    /// </field>
    /// <field name="_mouseOver" type="Boolean">
    /// </field>
    /// <field name="_hasFocus" type="Boolean">
    /// </field>
    /// <field name="_jQueryElement" type="jQuery">
    /// </field>
    /// <field name="_eventsHandler" type="js.com.cs.v2.Events.GenericEventsHandler">
    /// </field>
    /// <field name="_dialogBox" type="js.com.cs.v2.UI.JQuery.JQueryDialog">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_inBlur" type="Boolean">
    /// </field>
    /// <field name="_objData" type="Object">
    /// </field>
    this._eventsHandler = new js.com.cs.v2.Events.GenericEventsHandler();
    if (!isNullOrUndefined(domElement)) {
        if (Type.canCast(domElement, jQuery)) {
            this._jQueryElement = domElement;
        }
        else if (Type.canCast(domElement, String) || Type.canCast(domElement, Object)) {
            this._jQueryElement = js.com.JQueryScriptSharp.jQueryUtil.selectByIdOrElements(domElement);
        }
        else {
            throw new Error('Must either be a string or DOM Element');
        }
    }
    if (this.get_domElement() == null) {
        throw new Error('Please specify element \'' + domElement + '\'');
    }
    this._initHandlers();
}
js.com.cs.v2.Controls.Common.MyDOMElement.getElement = function js_com_cs_v2_Controls_Common_MyDOMElement$getElement(domElement) {
    /// <param name="domElement" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="js.com.cs.v2.Controls.Common.MyDOMElement"></returns>
    var e = null;
    if (Type.canCast(domElement, js.com.cs.v2.Controls.Common.MyDOMElement)) {
        e = domElement;
    }
    else {
        e = new js.com.cs.v2.Controls.Common.MyDOMElement(domElement);
    }
    return e;
}
js.com.cs.v2.Controls.Common.MyDOMElement.prototype = {
    _destroyed: false,
    _mouseOver: false,
    _hasFocus: false,
    
    get_opacity: function js_com_cs_v2_Controls_Common_MyDOMElement$get_opacity() {
        /// <summary>
        /// value must be from 0 - 1
        /// </summary>
        /// <value type="Number"></value>
        return Number.parse(this.get_jQueryElement().css('opacity'));
    },
    set_opacity: function js_com_cs_v2_Controls_Common_MyDOMElement$set_opacity(value) {
        /// <summary>
        /// value must be from 0 - 1
        /// </summary>
        /// <value type="Number"></value>
        this.get_jQueryElement().css('opacity', value);
        return value;
    },
    
    get_hasFocus: function js_com_cs_v2_Controls_Common_MyDOMElement$get_hasFocus() {
        /// <value type="Boolean"></value>
        return this._hasFocus;
    },
    
    get_isMouseOver: function js_com_cs_v2_Controls_Common_MyDOMElement$get_isMouseOver() {
        /// <value type="Boolean"></value>
        return this._mouseOver;
    },
    
    isVisible: function js_com_cs_v2_Controls_Common_MyDOMElement$isVisible(checkParents) {
        /// <param name="checkParents" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        var el = this.get_domElement();
        if (!isNullOrUndefined(checkParents) && checkParents) {
            var visible = this.isVisible();
            if (this.get_parent() != null && this.get_parent().get_domElement() !== js.com.cs.v2.Util.DOMUtil.get_body().get_domElement()) {
                visible = visible && this.get_parent().isVisible(checkParents);
            }
            return visible;
        }
        else {
            if (this.get_domElement().ownerDocument != null) {
                var vis = this.get_jQueryElement().css('display');
                return vis !== 'none';
            }
            else {
                return false;
            }
        }
    },
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyDOMElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return this._jQueryElement.get(0);
    },
    
    _jQueryElement: null,
    
    get_jQueryElement: function js_com_cs_v2_Controls_Common_MyDOMElement$get_jQueryElement() {
        /// <value type="jQuery"></value>
        return this._jQueryElement;
    },
    
    _dialogBox: null,
    _parent: null,
    
    _initHandlers: function js_com_cs_v2_Controls_Common_MyDOMElement$_initHandlers() {
        this.add_onMouseEnter(Delegate.create(this, this._myDOMElement_onMouseEnter));
        this.add_onMouseLeave(Delegate.create(this, this._myDOMElement_onMouseLeave));
        this.add_onFocus(Delegate.create(this, this._myDOMElement_onFocus));
        this.add_onBlur(Delegate.create(this, this._myDOMElement_onBlur));
    },
    
    _myDOMElement_onBlur: function js_com_cs_v2_Controls_Common_MyDOMElement$_myDOMElement_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._hasFocus = false;
    },
    
    _myDOMElement_onFocus: function js_com_cs_v2_Controls_Common_MyDOMElement$_myDOMElement_onFocus(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._hasFocus = true;
    },
    
    _myDOMElement_onMouseLeave: function js_com_cs_v2_Controls_Common_MyDOMElement$_myDOMElement_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._mouseOver = false;
    },
    
    _myDOMElement_onMouseEnter: function js_com_cs_v2_Controls_Common_MyDOMElement$_myDOMElement_onMouseEnter(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._mouseOver = true;
    },
    
    appendChild: function js_com_cs_v2_Controls_Common_MyDOMElement$appendChild(obj) {
        /// <param name="obj" type="Object" domElement="true">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        var elem = null;
        var arr = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        if (Type.canCast(obj, js.com.cs.v2.Controls.Common.MyDOMElement)) {
            elem = (obj).get_domElement();
        }
        else if (Type.canCast(obj, Object)) {
            elem = obj;
        }
        else {
            throw new Error('Cannot append child if it is not DOMElement or \'MyDOMElement\'');
        }
        return this.get_jQueryElement().append(elem).get(0);
    },
    
    removeChild: function js_com_cs_v2_Controls_Common_MyDOMElement$removeChild(elem, clearEventsAndJqueryData) {
        /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        /// <param name="clearEventsAndJqueryData" type="Boolean">
        /// </param>
        if (isNullOrUndefined(clearEventsAndJqueryData)) {
            clearEventsAndJqueryData = false;
        }
        if (!(Type.canCast(elem, js.com.cs.v2.Controls.Common.MyDOMElement)) && Type.canCast(elem, Object)) {
            elem = new js.com.cs.v2.Controls.Common.MyDOMElement((elem));
        }
        elem.remove(clearEventsAndJqueryData);
    },
    
    replaceChild: function js_com_cs_v2_Controls_Common_MyDOMElement$replaceChild(newChild, oldChild) {
        /// <param name="newChild" type="Object" domElement="true">
        /// </param>
        /// <param name="oldChild" type="Object" domElement="true">
        /// </param>
        if (Type.canCast(newChild, js.com.cs.v2.Controls.Common.MyDOMElement)) {
            newChild = (newChild).get_domElement();
        }
        if (Type.canCast(oldChild, js.com.cs.v2.Controls.Common.MyDOMElement)) {
            oldChild = (oldChild).get_domElement();
        }
        this.get_domElement().replaceChild(newChild, oldChild);
    },
    
    add_onClick: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onClick(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.click, this, value);
    },
    remove_onClick: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.click, value);
    },
    
    add_onFocus: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onFocus(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.focus, this, value);
    },
    remove_onFocus: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onFocus(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.focus, value);
    },
    
    add_onBlur: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onBlur(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.blur, this, value);
    },
    remove_onBlur: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onBlur(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.blur, value);
    },
    
    add_onLoad: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onLoad(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.load, this, value);
    },
    remove_onLoad: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.load, value);
    },
    
    add_onMouseDown: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseDown, this, value);
    },
    remove_onMouseDown: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseDown, value);
    },
    
    add_onMouseLeave: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseLeave(value) {
        /// <summary>
        /// Triggered when mouse leaves the entire div, not just this element (this is not a standard event)
        /// </summary>
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseLeave, this, value);
    },
    remove_onMouseLeave: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseLeave(value) {
        /// <summary>
        /// Triggered when mouse leaves the entire div, not just this element (this is not a standard event)
        /// </summary>
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseLeave, value);
    },
    
    add_onMouseMove: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseMove(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseMove, this, value);
    },
    remove_onMouseMove: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseMove(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseMove, value);
    },
    
    add_onMouseEnter: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseEnter(value) {
        /// <summary>
        /// Triggered whenever mouse enters container, not just this element (this is not a standard event)
        /// </summary>
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseEnter, this, value);
    },
    remove_onMouseEnter: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseEnter(value) {
        /// <summary>
        /// Triggered whenever mouse enters container, not just this element (this is not a standard event)
        /// </summary>
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseEnter, value);
    },
    
    add_onMouseOver: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseOver(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseOver, this, value);
    },
    remove_onMouseOver: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseOver(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseOver, value);
    },
    
    add_onMouseOut: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseOut(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseOut, this, value);
    },
    remove_onMouseOut: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseOut(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseOver, value);
    },
    
    add_onMouseUp: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onMouseUp(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseUp, this, value);
    },
    remove_onMouseUp: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onMouseUp(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseUp, value);
    },
    
    add_onKeyUp: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onKeyUp(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyUp, this, value);
    },
    remove_onKeyUp: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onKeyUp(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyUp, value);
    },
    
    add_onKeyDown: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onKeyDown(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyDown, this, value);
    },
    remove_onKeyDown: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onKeyDown(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyDown, value);
    },
    
    add_onKeyPress: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onKeyPress(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyPress, this, value);
    },
    remove_onKeyPress: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onKeyPress(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyPress, value);
    },
    
    add_onBeforeUnload: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onBeforeUnload(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.beforeUnload, this, value);
    },
    remove_onBeforeUnload: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onBeforeUnload(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.beforeUnload, value);
    },
    
    add_onChange: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.change, this, value);
    },
    remove_onChange: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.change, value);
    },
    
    add_onDoubleClick: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onDoubleClick(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.doubleClick, this, value);
    },
    remove_onDoubleClick: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onDoubleClick(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.doubleClick, value);
    },
    
    add_onError: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onError(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.error, this, value);
    },
    remove_onError: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onError(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.error, value);
    },
    
    add_onReady: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onReady(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.ready, this, value);
    },
    remove_onReady: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onReady(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.ready, value);
    },
    
    add_onResize: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onResize(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.resize, this, value);
    },
    remove_onResize: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onResize(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.resize, value);
    },
    
    add_onScroll: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onScroll(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.scroll, this, value);
    },
    remove_onScroll: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onScroll(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.scroll, value);
    },
    
    add_onSelect: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onSelect(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.select, this, value);
    },
    remove_onSelect: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onSelect(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.select, value);
    },
    
    add_onSubmit: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.submit, this, value);
    },
    remove_onSubmit: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.submit, value);
    },
    
    add_onUnload: function js_com_cs_v2_Controls_Common_MyDOMElement$add_onUnload(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.unload, this, value);
    },
    remove_onUnload: function js_com_cs_v2_Controls_Common_MyDOMElement$remove_onUnload(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.unload, value);
    },
    
    bind: function js_com_cs_v2_Controls_Common_MyDOMElement$bind(type, data, callback) {
        /// <param name="type" type="js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE">
        /// </param>
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="callback" type="js.com.JQueryScriptSharp.EventCallback">
        /// </param>
        var strType = js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(type);
        this._eventsHandler.addListener(strType, callback);
        this._jQueryElement.bind(strType, data, callback);
    },
    
    unBind: function js_com_cs_v2_Controls_Common_MyDOMElement$unBind(type, callback) {
        /// <param name="type" type="js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE">
        /// </param>
        /// <param name="callback" type="js.com.JQueryScriptSharp.EventCallback">
        /// </param>
        var strType = js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(type);
        var objDelegate = this._eventsHandler.removeListener(strType, callback, true);
        this._jQueryElement.unbind(strType, objDelegate);
    },
    
    hide: function js_com_cs_v2_Controls_Common_MyDOMElement$hide(speedPreset, callback) {
        /// <param name="speedPreset" type="String">
        /// </param>
        /// <param name="callback" type="DOMEventHandler">
        /// </param>
        this._jQueryElement.hide(speedPreset, callback);
    },
    
    show: function js_com_cs_v2_Controls_Common_MyDOMElement$show(speedPreset, callback) {
        /// <param name="speedPreset" type="String">
        /// </param>
        /// <param name="callback" type="DOMEventHandler">
        /// </param>
        this._jQueryElement.show(speedPreset, callback);
    },
    
    get_disabled: function js_com_cs_v2_Controls_Common_MyDOMElement$get_disabled() {
        /// <value type="Boolean"></value>
        return this.get_domElement().disabled;
    },
    set_disabled: function js_com_cs_v2_Controls_Common_MyDOMElement$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.get_domElement().disabled = value;
        return value;
    },
    
    get_enabled: function js_com_cs_v2_Controls_Common_MyDOMElement$get_enabled() {
        /// <value type="Boolean"></value>
        return !this.get_disabled();
    },
    set_enabled: function js_com_cs_v2_Controls_Common_MyDOMElement$set_enabled(value) {
        /// <value type="Boolean"></value>
        this.set_disabled(!value);
        return value;
    },
    
    enable: function js_com_cs_v2_Controls_Common_MyDOMElement$enable() {
        this.set_enabled(true);
    },
    
    disable: function js_com_cs_v2_Controls_Common_MyDOMElement$disable() {
        this.set_disabled(true);
    },
    
    get_readOnly: function js_com_cs_v2_Controls_Common_MyDOMElement$get_readOnly() {
        /// <value type="Boolean"></value>
        return this._jQueryElement.attr('readonly');
    },
    set_readOnly: function js_com_cs_v2_Controls_Common_MyDOMElement$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this._jQueryElement.attr('readonly', value);
        return value;
    },
    
    performClick: function js_com_cs_v2_Controls_Common_MyDOMElement$performClick() {
        this.get_domElement().click();
    },
    
    get_tagName: function js_com_cs_v2_Controls_Common_MyDOMElement$get_tagName() {
        /// <value type="String"></value>
        return this.get_domElement().tagName.toLowerCase();
    },
    
    get_tagType: function js_com_cs_v2_Controls_Common_MyDOMElement$get_tagType() {
        /// <value type="String"></value>
        if (String.compare(this.get_tagName(), 'input', true) === 0) {
            var input = this.get_domElement();
            return input.type.toLowerCase();
        }
        return '';
    },
    
    get_style: function js_com_cs_v2_Controls_Common_MyDOMElement$get_style() {
        /// <value type="Style"></value>
        return this.get_domElement().style;
    },
    
    get_id: function js_com_cs_v2_Controls_Common_MyDOMElement$get_id() {
        /// <value type="String"></value>
        return this.get_domElement().id;
    },
    set_id: function js_com_cs_v2_Controls_Common_MyDOMElement$set_id(value) {
        /// <value type="String"></value>
        this.get_domElement().id = value;
        return value;
    },
    
    get_innerHTML: function js_com_cs_v2_Controls_Common_MyDOMElement$get_innerHTML() {
        /// <value type="String"></value>
        return this.get_domElement().innerHTML;
    },
    set_innerHTML: function js_com_cs_v2_Controls_Common_MyDOMElement$set_innerHTML(value) {
        /// <value type="String"></value>
        this.get_domElement().innerHTML = value;
        return value;
    },
    
    get_innerText: function js_com_cs_v2_Controls_Common_MyDOMElement$get_innerText() {
        /// <value type="String"></value>
        return this.get_domElement().innerText;
    },
    set_innerText: function js_com_cs_v2_Controls_Common_MyDOMElement$set_innerText(value) {
        /// <value type="String"></value>
        this.get_domElement().innerText = value;
        return value;
    },
    
    setOpacity: function js_com_cs_v2_Controls_Common_MyDOMElement$setOpacity(d) {
        /// <param name="d" type="Number">
        /// </param>
        this._jQueryElement.css('opacity', d);
    },
    
    focus: function js_com_cs_v2_Controls_Common_MyDOMElement$focus() {
        /// <returns type="Boolean"></returns>
        try {
            this.get_domElement().focus();
            return true;
        }
        catch (ex) {
            return false;
        }
    },
    
    _inBlur: false,
    
    blur: function js_com_cs_v2_Controls_Common_MyDOMElement$blur() {
        /// <returns type="Boolean"></returns>
        var b = true;
        if (!this._inBlur) {
            this._inBlur = true;
            try {
                this.get_domElement().blur();
            }
            catch ($e1) {
                b = false;
            }
            this._inBlur = false;
        }
        return b;
    },
    
    fadeIn: function js_com_cs_v2_Controls_Common_MyDOMElement$fadeIn(durationMS) {
        /// <param name="durationMS" type="Number" integer="true">
        /// </param>
        /// <returns type="jQuery"></returns>
        return this._jQueryElement.fadeIn(durationMS);
    },
    
    fadeOut: function js_com_cs_v2_Controls_Common_MyDOMElement$fadeOut(duration, onEnd) {
        /// <param name="duration" type="Number" integer="true">
        /// </param>
        /// <param name="onEnd" type="DOMEventHandler">
        /// If onEnd is specfied, the element display is not set to none
        /// </param>
        /// <returns type="jQuery"></returns>
        return this._jQueryElement.fadeOut(duration, onEnd);
    },
    
    placeChildBefore: function js_com_cs_v2_Controls_Common_MyDOMElement$placeChildBefore(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        this._jQueryElement.before(elem);
    },
    
    placeChildAfter: function js_com_cs_v2_Controls_Common_MyDOMElement$placeChildAfter(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        this._jQueryElement.after(elem);
    },
    
    addClass: function js_com_cs_v2_Controls_Common_MyDOMElement$addClass(className1, className2, className3, className4) {
        /// <param name="className1" type="String">
        /// </param>
        /// <param name="className2" type="String">
        /// </param>
        /// <param name="className3" type="String">
        /// </param>
        /// <param name="className4" type="String">
        /// </param>
        if (!String.isNullOrEmpty(className1)) {
            this._jQueryElement.addClass(className1);
        }
        if (!String.isNullOrEmpty(className2)) {
            this._jQueryElement.addClass(className2);
        }
        if (!String.isNullOrEmpty(className3)) {
            this._jQueryElement.addClass(className3);
        }
        if (!String.isNullOrEmpty(className4)) {
            this._jQueryElement.addClass(className4);
        }
    },
    
    removeClass: function js_com_cs_v2_Controls_Common_MyDOMElement$removeClass(className1, className2, className3, className4) {
        /// <param name="className1" type="String">
        /// </param>
        /// <param name="className2" type="String">
        /// </param>
        /// <param name="className3" type="String">
        /// </param>
        /// <param name="className4" type="String">
        /// </param>
        if (!String.isNullOrEmpty(className1)) {
            this._jQueryElement.removeClass(className1);
        }
        if (!String.isNullOrEmpty(className2)) {
            this._jQueryElement.removeClass(className2);
        }
        if (!String.isNullOrEmpty(className3)) {
            this._jQueryElement.removeClass(className3);
        }
        if (!String.isNullOrEmpty(className4)) {
            this._jQueryElement.removeClass(className4);
        }
    },
    
    get_cssClass: function js_com_cs_v2_Controls_Common_MyDOMElement$get_cssClass() {
        /// <value type="String"></value>
        return this._jQueryElement.attr('class');
    },
    set_cssClass: function js_com_cs_v2_Controls_Common_MyDOMElement$set_cssClass(value) {
        /// <value type="String"></value>
        this._jQueryElement.attr('class', value);
        return value;
    },
    
    toggleClass: function js_com_cs_v2_Controls_Common_MyDOMElement$toggleClass(className, switchFlag) {
        /// <summary>
        /// Toggles the class.  If switch is set to true, it will add class,if set to false,it will remove class.
        /// </summary>
        /// <param name="className" type="String">
        /// </param>
        /// <param name="switchFlag" type="Boolean">
        /// </param>
        if (className != null) {
            this._jQueryElement.toggleClass(className, switchFlag);
        }
    },
    
    get_form: function js_com_cs_v2_Controls_Common_MyDOMElement$get_form() {
        /// <summary>
        /// Returns the form element, if the item is an input element
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        if (String.compare(this.get_tagName(), 'input', true) === 0 || String.compare(this.get_tagName(), 'select', true) === 0 || String.compare(this.get_tagName(), 'textarea', true) === 0) {
            var elem = this.get_domElement();
            return elem.form;
        }
        else {
            throw new Error('Cannot retrieve \'Form\' if the item is not a \'input\',\'select\', or \'textarea\'');
        }
    },
    
    get_title: function js_com_cs_v2_Controls_Common_MyDOMElement$get_title() {
        /// <value type="String"></value>
        return this.get_domElement().title;
    },
    set_title: function js_com_cs_v2_Controls_Common_MyDOMElement$set_title(value) {
        /// <value type="String"></value>
        this.get_domElement().title = value;
        return value;
    },
    
    clear: function js_com_cs_v2_Controls_Common_MyDOMElement$clear(deleteEventsAndAllData) {
        /// <param name="deleteEventsAndAllData" type="Boolean">
        /// </param>
        if (isNullOrUndefined(deleteEventsAndAllData)) {
            deleteEventsAndAllData = false;
        }
        if (deleteEventsAndAllData) {
            this.get_jQueryElement().children().remove();
        }
        else {
            this.get_jQueryElement().children().detach();
        }
    },
    
    setAttribute: function js_com_cs_v2_Controls_Common_MyDOMElement$setAttribute(name, value) {
        /// <param name="name" type="String">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        this._jQueryElement.attr(name, value);
    },
    
    clearAttribute: function js_com_cs_v2_Controls_Common_MyDOMElement$clearAttribute(name) {
        /// <param name="name" type="String">
        /// </param>
        this._jQueryElement.attr('name', null);
    },
    
    _getBorderSize: function js_com_cs_v2_Controls_Common_MyDOMElement$_getBorderSize(cssName) {
        /// <param name="cssName" type="String">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        var borderLeftWidth = this._jQueryElement.css(cssName);
        var borderLeft = Number.parse(borderLeftWidth);
        if (isNaN(borderLeft)) {
            borderLeft = 0;
        }
        return borderLeft;
    },
    
    getBorderTopWidth: function js_com_cs_v2_Controls_Common_MyDOMElement$getBorderTopWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderTopWidth');
    },
    
    getBorderLeftWidth: function js_com_cs_v2_Controls_Common_MyDOMElement$getBorderLeftWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderLeftWidth');
    },
    
    getBorderRightWidth: function js_com_cs_v2_Controls_Common_MyDOMElement$getBorderRightWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderRightWidth');
    },
    
    getBorderBottomWidth: function js_com_cs_v2_Controls_Common_MyDOMElement$getBorderBottomWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderBottomWidth');
    },
    
    _initDialogBox: function js_com_cs_v2_Controls_Common_MyDOMElement$_initDialogBox() {
        if (this._dialogBox == null) {
            this._dialogBox = new js.com.cs.v2.UI.JQuery.JQueryDialog(this.get_jQueryElement());
        }
    },
    
    get_myDomElement: function js_com_cs_v2_Controls_Common_MyDOMElement$get_myDomElement() {
        /// <value type="js.com.cs.v2.Controls.Common.MyDOMElement"></value>
        return this;
    },
    
    get_dialog: function js_com_cs_v2_Controls_Common_MyDOMElement$get_dialog() {
        /// <value type="js.com.cs.v2.UI.JQuery.JQueryDialog"></value>
        this._initDialogBox();
        return this._dialogBox;
    },
    
    _setDialogDefaults: function js_com_cs_v2_Controls_Common_MyDOMElement$_setDialogDefaults(title, showCloseIcon) {
        /// <param name="title" type="String">
        /// </param>
        /// <param name="showCloseIcon" type="Boolean">
        /// </param>
        this._initDialogBox();
        this._dialogBox.set_closeOnEscape(showCloseIcon);
        this._dialogBox.set_draggable(true);
        this._dialogBox.set_modal(true);
        this._dialogBox.set_title(title);
        this._dialogBox.set_closeable(showCloseIcon);
    },
    
    showDialog: function js_com_cs_v2_Controls_Common_MyDOMElement$showDialog(title, showCloseIcon, btnNoText, btnYesText, btnYesHandler) {
        /// <param name="title" type="String">
        /// </param>
        /// <param name="showCloseIcon" type="Boolean">
        /// </param>
        /// <param name="btnNoText" type="String">
        /// </param>
        /// <param name="btnYesText" type="String">
        /// </param>
        /// <param name="btnYesHandler" type="Callback">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.JQuery.JQueryDialog"></returns>
        this._setDialogDefaults(title, showCloseIcon);
        if (!isNullOrUndefined(btnNoText) && isNullOrUndefined(btnYesText)) {
            this._dialogBox.setOkButton(btnNoText);
        }
        else if (!isNullOrUndefined(btnNoText) && !isNullOrUndefined(btnYesText)) {
            this._dialogBox.setYesNoButtons(btnYesText, btnYesHandler, btnNoText);
        }
        else {
            this._dialogBox.setButtons({});
        }
        this._dialogBox.open();
        return this._dialogBox;
    },
    
    isInDOM: function js_com_cs_v2_Controls_Common_MyDOMElement$isInDOM() {
        /// <returns type="Boolean"></returns>
        if (this.get_parent() == null) {
            return false;
        }
        else if (this.get_parent().get_domElement() === document.body) {
            return true;
        }
        else {
            return this.get_parent().isInDOM();
        }
    },
    
    get_parent: function js_com_cs_v2_Controls_Common_MyDOMElement$get_parent() {
        /// <value type="js.com.cs.v2.Controls.Common.MyDOMElement"></value>
        if ((this._parent == null && this.get_domElement().parentNode != null) || (this._parent != null && this._parent.get_domElement() !== this.get_domElement().parentNode)) {
            var parentElem = this.get_domElement().parentNode;
            if (js.com.cs.v2.Util.GeneralUtil.isIE() !== 0) {
                var objParent = this.get_domElement().parentElement;
                if (objParent == null) {
                    parentElem = null;
                }
            }
            if (parentElem != null) {
                this._parent = new js.com.cs.v2.Controls.Common.MyDOMElement(this.get_domElement().parentNode);
            }
        }
        return this._parent;
    },
    
    replaceWith: function js_com_cs_v2_Controls_Common_MyDOMElement$replaceWith(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        if (Type.canCast(elem, js.com.cs.v2.Controls.Common.MyDOMElement)) {
            var myDomElem = elem;
            elem = myDomElem.get_domElement();
        }
        this.get_jQueryElement().replaceWith(elem);
    },
    
    _getVisiblePropertyValue: function js_com_cs_v2_Controls_Common_MyDOMElement$_getVisiblePropertyValue(type) {
        /// <param name="type" type="js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        var isVisible = this.isVisible(true);
        var value = 0;
        switch (type) {
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.height:
                value = this.get_jQueryElement().height();
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.left:
                value = this.get_jQueryElement().position().left;
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeight:
                value = this.get_jQueryElement().outerHeight();
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeightIncludeMargin:
                value = this.get_jQueryElement().outerHeight(true);
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidth:
                value = this.get_jQueryElement().outerWidth();
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidthIncludeMargin:
                value = this.get_jQueryElement().outerWidth(true);
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.top:
                value = this.get_jQueryElement().position().top;
                break;
            case js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.width:
                value = this.get_jQueryElement().width();
                break;
        }
        if (!isVisible) {
            var domInvisibles = [];
            var domParent = this.get_parent();
            while (domParent != null && domParent.get_domElement() !== js.com.cs.v2.Util.DOMUtil.get_body().get_domElement()) {
                if (!domParent.isVisible()) {
                    domInvisibles[domInvisibles.length] = domParent;
                }
                var id = domParent.get_id();
                domParent = domParent.get_parent();
            }
            for (var i = 0; i < domInvisibles.length; i++) {
                domInvisibles[i].get_jQueryElement().css('display', '');
            }
            value = this._getVisiblePropertyValue(type);
            for (var i = 0; i < domInvisibles.length; i++) {
                domInvisibles[i].get_jQueryElement().css('display', 'none');
            }
        }
        return value;
    },
    
    getWidth: function js_com_cs_v2_Controls_Common_MyDOMElement$getWidth() {
        /// <summary>
        /// Returns the height of the item, even if it is hidden.  It will temporary show parents, calculate height
        /// and re hides them.
        /// </summary>
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.width);
    },
    
    getOuterWidth: function js_com_cs_v2_Controls_Common_MyDOMElement$getOuterWidth(includeMargins) {
        /// <param name="includeMargins" type="Boolean">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue((includeMargins) ? js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidthIncludeMargin : js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidth);
    },
    
    getHeight: function js_com_cs_v2_Controls_Common_MyDOMElement$getHeight() {
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.height);
    },
    
    getOuterHeight: function js_com_cs_v2_Controls_Common_MyDOMElement$getOuterHeight(includeMargins) {
        /// <param name="includeMargins" type="Boolean">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue((includeMargins) ? js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeightIncludeMargin : js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeight);
    },
    
    getLeft: function js_com_cs_v2_Controls_Common_MyDOMElement$getLeft() {
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.left);
    },
    
    getTop: function js_com_cs_v2_Controls_Common_MyDOMElement$getTop() {
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v2.Controls.Common.GET_VISIBLE_ITEM_TYPE.top);
    },
    
    getVisibleHeight: function js_com_cs_v2_Controls_Common_MyDOMElement$getVisibleHeight(outerHeight) {
        /// <summary>
        /// Returns the height of the item, even if it is hidden.  It will temporary show parents, calculate height
        /// and re hides them.
        /// </summary>
        /// <param name="outerHeight" type="Boolean">
        /// Outer margin or not
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        var isVisible = this.isVisible(true);
        var height = (outerHeight) ? this.get_jQueryElement().outerHeight() : this.get_jQueryElement().height();
        if (!isVisible) {
            var domInvisibles = [];
            var domParent = this.get_parent();
            while (domParent != null && domParent.get_domElement() !== js.com.cs.v2.Util.DOMUtil.get_body().get_domElement()) {
                if (!domParent.isVisible()) {
                    domInvisibles[domInvisibles.length] = domParent;
                }
                var id = domParent.get_id();
                domParent = domParent.get_parent();
            }
            for (var i = 0; i < domInvisibles.length; i++) {
                domInvisibles[i].get_jQueryElement().css('display', '');
            }
            height = (outerHeight) ? this.get_jQueryElement().outerHeight() : this.get_jQueryElement().height();
            for (var i = 0; i < domInvisibles.length; i++) {
                domInvisibles[i].get_jQueryElement().css('display', 'none');
            }
        }
        return height;
    },
    
    _objData: null,
    
    get_objData: function js_com_cs_v2_Controls_Common_MyDOMElement$get_objData() {
        /// <summary>
        /// To store some reference with this element
        /// </summary>
        /// <value type="Object"></value>
        return this._objData;
    },
    set_objData: function js_com_cs_v2_Controls_Common_MyDOMElement$set_objData(value) {
        /// <summary>
        /// To store some reference with this element
        /// </summary>
        /// <value type="Object"></value>
        this._objData = value;
        return value;
    },
    
    get_marginLeft: function js_com_cs_v2_Controls_Common_MyDOMElement$get_marginLeft() {
        /// <value type="Number" integer="true"></value>
        var css = this.get_jQueryElement().css('marginLeft');
        if (String.isNullOrEmpty(css) || css.toLowerCase() === 'auto') {
            return 0;
        }
        else {
            return Number.parse(css);
        }
    },
    
    get_marginRight: function js_com_cs_v2_Controls_Common_MyDOMElement$get_marginRight() {
        /// <value type="Number" integer="true"></value>
        var css = this.get_jQueryElement().css('marginRight');
        if (String.isNullOrEmpty(css) || css.toLowerCase() === 'auto') {
            return 0;
        }
        else {
            return Number.parse(css);
        }
    },
    
    slideLeft: function js_com_cs_v2_Controls_Common_MyDOMElement$slideLeft(durationMS) {
        /// <param name="durationMS" type="Number" integer="true">
        /// </param>
        var css = {};
        this.get_jQueryElement().css('width', this.get_jQueryElement().width());
        this.get_jQueryElement().css('marginLeft', this.get_marginLeft());
        this.get_jQueryElement().css('marginRight', this.get_marginRight());
        css['width'] = 0;
        css['paddingLeft'] = 0;
        css['paddingRight'] = 0;
        css['marginLeft'] = 0;
        css['marginRight'] = 0;
        css['borderWidth'] = '0px';
        this.get_jQueryElement().css('height', this.get_jQueryElement().height());
        this.get_jQueryElement().css('overflow', 'hidden');
        this.get_jQueryElement().animate(css, durationMS, null, Delegate.create(this, this.destroy));
    },
    
    remove: function js_com_cs_v2_Controls_Common_MyDOMElement$remove(clearEventsAndJqueryData) {
        /// <param name="clearEventsAndJqueryData" type="Boolean">
        /// </param>
        if (isNullOrUndefined(clearEventsAndJqueryData)) {
            clearEventsAndJqueryData = false;
        }
        if (clearEventsAndJqueryData) {
            this.get_jQueryElement().remove();
        }
        else {
            this.get_jQueryElement().detach();
        }
    },
    
    get_destroyed: function js_com_cs_v2_Controls_Common_MyDOMElement$get_destroyed() {
        /// <value type="Boolean"></value>
        return this._destroyed;
    },
    
    destroy: function js_com_cs_v2_Controls_Common_MyDOMElement$destroy() {
        this._destroyed = true;
        this.remove(true);
    },
    
    select: function js_com_cs_v2_Controls_Common_MyDOMElement$select(expression) {
        /// <param name="expression" type="String">
        /// </param>
        /// <returns type="jQuery"></returns>
        return js.com.JQueryScriptSharp.jQueryUtil.select(expression, this.get_jQueryElement());
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyFormElement

js.com.cs.v2.Controls.Common.MyFormElement = function js_com_cs_v2_Controls_Common_MyFormElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyFormElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('form') : domElement ]);
}
js.com.cs.v2.Controls.Common.MyFormElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyFormElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyFormElement.callBase(this, 'get_domElement');
    },
    
    checkIfFormContainsFilledFileUploads: function js_com_cs_v2_Controls_Common_MyFormElement$checkIfFormContainsFilledFileUploads() {
        /// <returns type="Boolean"></returns>
        var list = js.com.JQueryScriptSharp.jQueryUtil.select('input[type=\'file\']', this.get_domElement());
        for (var i = 0; i < list.length; i++) {
            var fileUpload = new js.com.cs.v2.Controls.Form.MyFileUpload(list.get(i));
            if (!String.isNullOrEmpty(fileUpload.get_value())) {
                return true;
            }
        }
        return false;
    },
    
    add_onSubmit: function js_com_cs_v2_Controls_Common_MyFormElement$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.get_domElement().attachEvent('onsubmit', value);
    },
    remove_onSubmit: function js_com_cs_v2_Controls_Common_MyFormElement$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.get_domElement().detachEvent('onsubmit', value);
    },
    
    get_action: function js_com_cs_v2_Controls_Common_MyFormElement$get_action() {
        /// <value type="String"></value>
        return this.get_domElement().action;
    },
    set_action: function js_com_cs_v2_Controls_Common_MyFormElement$set_action(value) {
        /// <value type="String"></value>
        this.get_domElement().action = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyImageElement

js.com.cs.v2.Controls.Common.MyImageElement = function js_com_cs_v2_Controls_Common_MyImageElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="_onLoadTriggered$1" type="Boolean">
    /// </field>
    /// <field name="_onLoadWidth$1" type="Number" integer="true">
    /// </field>
    /// <field name="_onLoadHeight$1" type="Number" integer="true">
    /// </field>
    js.com.cs.v2.Controls.Common.MyImageElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('img') : domElement ]);
    this.add_onLoad(Delegate.create(this, this._myImageElement_onLoad$1));
}
js.com.cs.v2.Controls.Common.MyImageElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyImageElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyImageElement.callBase(this, 'get_domElement');
    },
    
    _onLoadTriggered$1: false,
    _onLoadWidth$1: 0,
    
    get_onLoadWidth: function js_com_cs_v2_Controls_Common_MyImageElement$get_onLoadWidth() {
        /// <summary>
        /// The width which was captured once image was loaded
        /// </summary>
        /// <value type="Number" integer="true"></value>
        return this._onLoadWidth$1;
    },
    
    _onLoadHeight$1: 0,
    
    get_onLoadHeight: function js_com_cs_v2_Controls_Common_MyImageElement$get_onLoadHeight() {
        /// <value type="Number" integer="true"></value>
        return this._onLoadHeight$1;
    },
    
    _setOnLoadTriggered$1: function js_com_cs_v2_Controls_Common_MyImageElement$_setOnLoadTriggered$1() {
        this._onLoadTriggered$1 = true;
    },
    
    _uploadLoadWidth$1: function js_com_cs_v2_Controls_Common_MyImageElement$_uploadLoadWidth$1() {
        this._onLoadWidth$1 = this.get_width();
        this._onLoadHeight$1 = this.get_height();
    },
    
    _myImageElement_onLoad$1: function js_com_cs_v2_Controls_Common_MyImageElement$_myImageElement_onLoad$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        window.setTimeout(Delegate.create(this, this._setOnLoadTriggered$1), 250);
        window.setTimeout(Delegate.create(this, this._uploadLoadWidth$1), 1000);
    },
    
    get_src: function js_com_cs_v2_Controls_Common_MyImageElement$get_src() {
        /// <value type="String"></value>
        return this.get_domElement().src;
    },
    set_src: function js_com_cs_v2_Controls_Common_MyImageElement$set_src(value) {
        /// <value type="String"></value>
        this._onLoadTriggered$1 = false;
        this.get_domElement().src = value;
        return value;
    },
    
    get_alt: function js_com_cs_v2_Controls_Common_MyImageElement$get_alt() {
        /// <value type="String"></value>
        return this.get_domElement().alt;
    },
    set_alt: function js_com_cs_v2_Controls_Common_MyImageElement$set_alt(value) {
        /// <value type="String"></value>
        this.get_domElement().alt = value;
        return value;
    },
    
    get_title: function js_com_cs_v2_Controls_Common_MyImageElement$get_title() {
        /// <value type="String"></value>
        return this.get_domElement().title;
    },
    set_title: function js_com_cs_v2_Controls_Common_MyImageElement$set_title(value) {
        /// <value type="String"></value>
        this.get_domElement().title = value;
        return value;
    },
    
    get_complete: function js_com_cs_v2_Controls_Common_MyImageElement$get_complete() {
        /// <value type="Boolean"></value>
        return this.get_domElement().complete;
    },
    
    _triggerImageLoad$1: function js_com_cs_v2_Controls_Common_MyImageElement$_triggerImageLoad$1() {
        this.get_jQueryElement().triggerHandler(js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.load));
    },
    
    add_onLoad: function js_com_cs_v2_Controls_Common_MyImageElement$add_onLoad(value) {
        /// <param name="value" type="Function" />
        js.com.cs.v2.Controls.Common.MyImageElement.callBase(this, 'bind', [ js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.load, this, value ]);
        if (this.get_complete() && !this._onLoadTriggered$1) {
            window.setTimeout(Delegate.create(this, this._triggerImageLoad$1), 50);
        }
    },
    remove_onLoad: function js_com_cs_v2_Controls_Common_MyImageElement$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        js.com.cs.v2.Controls.Common.MyImageElement.callBase(this, 'unBind', [ js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.load, value ]);
    },
    
    get_width: function js_com_cs_v2_Controls_Common_MyImageElement$get_width() {
        /// <value type="Number" integer="true"></value>
        return this.get_domElement().width;
    },
    set_width: function js_com_cs_v2_Controls_Common_MyImageElement$set_width(value) {
        /// <value type="Number" integer="true"></value>
        this.get_domElement().width = value;
        return value;
    },
    
    get_height: function js_com_cs_v2_Controls_Common_MyImageElement$get_height() {
        /// <value type="Number" integer="true"></value>
        return this.get_domElement().height;
    },
    set_height: function js_com_cs_v2_Controls_Common_MyImageElement$set_height(value) {
        /// <value type="Number" integer="true"></value>
        this.get_domElement().height = value;
        return value;
    },
    
    get_naturalWidth: function js_com_cs_v2_Controls_Common_MyImageElement$get_naturalWidth() {
        /// <value type="Number" integer="true"></value>
        var currMaxWidth = this.get_jQueryElement().css('maxWidth');
        var currMaxHeight = this.get_jQueryElement().css('maxHeight');
        var currWidth = this.get_jQueryElement().css('width');
        var currHeight = this.get_jQueryElement().css('height');
        this.get_jQueryElement().css('maxWidth', 'none');
        this.get_jQueryElement().css('maxHeight', 'none');
        this.get_jQueryElement().css('width', 'auto');
        this.get_jQueryElement().css('height', 'auto');
        var width = this.get_jQueryElement().width();
        this.get_jQueryElement().css('maxWidth', currMaxWidth);
        this.get_jQueryElement().css('maxHeight', currMaxHeight);
        this.get_jQueryElement().css('width', currWidth);
        this.get_jQueryElement().css('height', currHeight);
        return width;
    },
    
    get_naturalHeight: function js_com_cs_v2_Controls_Common_MyImageElement$get_naturalHeight() {
        /// <value type="Number" integer="true"></value>
        var currMaxWidth = this.get_jQueryElement().css('maxWidth');
        var currMaxHeight = this.get_jQueryElement().css('maxHeight');
        var currWidth = this.get_jQueryElement().css('width');
        var currHeight = this.get_jQueryElement().css('height');
        this.get_jQueryElement().css('maxWidth', 'none');
        this.get_jQueryElement().css('maxHeight', 'none');
        this.get_jQueryElement().css('width', 'auto');
        this.get_jQueryElement().css('height', 'auto');
        var height = this.get_jQueryElement().height();
        this.get_jQueryElement().css('maxWidth', currMaxWidth);
        this.get_jQueryElement().css('maxHeight', currMaxHeight);
        this.get_jQueryElement().css('width', currWidth);
        this.get_jQueryElement().css('height', currHeight);
        return height;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyInputElement

js.com.cs.v2.Controls.Common.MyInputElement = function js_com_cs_v2_Controls_Common_MyInputElement(domElement, inputType) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <param name="inputType" type="String">
    /// </param>
    js.com.cs.v2.Controls.Common.MyInputElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('input') : domElement ]);
    if (!isNullOrUndefined(inputType)) {
        this.get_domElement().type = inputType;
    }
}
js.com.cs.v2.Controls.Common.MyInputElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyInputElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyInputElement.callBase(this, 'get_domElement');
    },
    
    get_value: function js_com_cs_v2_Controls_Common_MyInputElement$get_value() {
        /// <value type="String"></value>
        return Type.safeCast(this.get_jQueryElement().attr('value'), String);
    },
    set_value: function js_com_cs_v2_Controls_Common_MyInputElement$set_value(value) {
        /// <value type="String"></value>
        this.get_jQueryElement().attr('value', this.get_value());
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyLabelElement

js.com.cs.v2.Controls.Common.MyLabelElement = function js_com_cs_v2_Controls_Common_MyLabelElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="_forElement$1" type="Object" domElement="true">
    /// </field>
    /// <field name="_forId$1" type="String">
    /// </field>
    js.com.cs.v2.Controls.Common.MyLabelElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('label') : domElement ]);
}
js.com.cs.v2.Controls.Common.MyLabelElement.prototype = {
    _forElement$1: null,
    
    get_forElement: function js_com_cs_v2_Controls_Common_MyLabelElement$get_forElement() {
        /// <value type="Object" domElement="true"></value>
        return this._forElement$1;
    },
    set_forElement: function js_com_cs_v2_Controls_Common_MyLabelElement$set_forElement(value) {
        /// <value type="Object" domElement="true"></value>
        this._forElement$1 = value;
        this.set_forId(value.id);
        return value;
    },
    
    _forId$1: null,
    
    get_forId: function js_com_cs_v2_Controls_Common_MyLabelElement$get_forId() {
        /// <value type="String"></value>
        return this._forId$1;
    },
    set_forId: function js_com_cs_v2_Controls_Common_MyLabelElement$set_forId(value) {
        /// <value type="String"></value>
        this._forId$1 = value;
        this.setAttribute('for', value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyListItemElem

js.com.cs.v2.Controls.Common.MyListItemElem = function js_com_cs_v2_Controls_Common_MyListItemElem(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyListItemElem.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('li') : domElement ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyParagraphElement

js.com.cs.v2.Controls.Common.MyParagraphElement = function js_com_cs_v2_Controls_Common_MyParagraphElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyParagraphElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('p') : domElement ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MySpanElement

js.com.cs.v2.Controls.Common.MySpanElement = function js_com_cs_v2_Controls_Common_MySpanElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MySpanElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('span') : domElement ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyTableCellElement

js.com.cs.v2.Controls.Common.MyTableCellElement = function js_com_cs_v2_Controls_Common_MyTableCellElement(domElement, heading) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <param name="heading" type="Boolean">
    /// To make it [th] - true or [td] - false
    /// </param>
    js.com.cs.v2.Controls.Common.MyTableCellElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement((isNullOrUndefined(heading) || !heading) ? 'td' : 'th') : domElement ]);
}
js.com.cs.v2.Controls.Common.MyTableCellElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyTableCellElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyTableCellElement.callBase(this, 'get_domElement');
    },
    
    get_cellIndex: function js_com_cs_v2_Controls_Common_MyTableCellElement$get_cellIndex() {
        /// <value type="Number" integer="true"></value>
        return this.get_domElement().get_cellIndex();
    },
    
    get_colSpan: function js_com_cs_v2_Controls_Common_MyTableCellElement$get_colSpan() {
        /// <value type="Number" integer="true"></value>
        return this.get_domElement().colSpan;
    },
    set_colSpan: function js_com_cs_v2_Controls_Common_MyTableCellElement$set_colSpan(value) {
        /// <value type="Number" integer="true"></value>
        this.get_domElement().colSpan = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyTableElement

js.com.cs.v2.Controls.Common.MyTableElement = function js_com_cs_v2_Controls_Common_MyTableElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyTableElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('table') : domElement ]);
    this.set_cellPadding(this.set_cellSpacing(0));
}
js.com.cs.v2.Controls.Common.MyTableElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyTableElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyTableElement.callBase(this, 'get_domElement');
    },
    
    insertRow: function js_com_cs_v2_Controls_Common_MyTableElement$insertRow(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyTableRowElement"></returns>
        if (isNullOrUndefined(index)) {
            index = -1;
        }
        var row = this.get_domElement().insertRow(index);
        return new js.com.cs.v2.Controls.Common.MyTableRowElement(row);
    },
    
    deleteRow: function js_com_cs_v2_Controls_Common_MyTableElement$deleteRow(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var obj = index;
        if (Type.canCast(obj, js.com.cs.v2.Controls.Common.MyTableRowElement)) {
            var tr = obj;
            index = tr.get_domElement().rowIndex;
        }
        else if (Type.canCast(obj, Number)) {
        }
        this.get_domElement().deleteRow(index);
    },
    
    appendChild: function js_com_cs_v2_Controls_Common_MyTableElement$appendChild(obj) {
        /// <param name="obj" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (Type.canCast(obj, js.com.cs.v2.Controls.Common.MyTableRowElement)) {
            throw new Error('Please use the InsertRow method as adding a row via the appendChild is not compatible with all browsers');
        }
        return js.com.cs.v2.Controls.Common.MyTableElement.callBase(this, 'appendChild', [ obj ]);
    },
    
    get_cellPadding: function js_com_cs_v2_Controls_Common_MyTableElement$get_cellPadding() {
        /// <value type="Number" integer="true"></value>
        return Number.parse(this.get_jQueryElement().attr('cellpadding').toString());
    },
    set_cellPadding: function js_com_cs_v2_Controls_Common_MyTableElement$set_cellPadding(value) {
        /// <value type="Number" integer="true"></value>
        this.get_jQueryElement().attr('cellpadding', value);
        return value;
    },
    
    get_cellSpacing: function js_com_cs_v2_Controls_Common_MyTableElement$get_cellSpacing() {
        /// <value type="Number" integer="true"></value>
        return Number.parse(this.get_jQueryElement().attr('cellspacing').toString());
    },
    set_cellSpacing: function js_com_cs_v2_Controls_Common_MyTableElement$set_cellSpacing(value) {
        /// <value type="Number" integer="true"></value>
        this.get_jQueryElement().attr('cellspacing', value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyTableRowElement

js.com.cs.v2.Controls.Common.MyTableRowElement = function js_com_cs_v2_Controls_Common_MyTableRowElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyTableRowElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('tr') : domElement ]);
}
js.com.cs.v2.Controls.Common.MyTableRowElement.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Common_MyTableRowElement$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Common.MyTableRowElement.callBase(this, 'get_domElement');
    },
    
    insertCell: function js_com_cs_v2_Controls_Common_MyTableRowElement$insertCell(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyTableCellElement"></returns>
        if (isNullOrUndefined(index)) {
            index = -1;
        }
        var cell = this.get_domElement().insertCell(index);
        return new js.com.cs.v2.Controls.Common.MyTableCellElement(cell);
    },
    
    deleteCell: function js_com_cs_v2_Controls_Common_MyTableRowElement$deleteCell(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var obj = index;
        if (Type.canCast(obj, js.com.cs.v2.Controls.Common.MyTableCellElement)) {
            var td = obj;
            index = td.get_cellIndex();
        }
        else if (Type.canCast(obj, Number)) {
        }
        this.get_domElement().deleteCell(index);
    },
    
    get_rowIndex: function js_com_cs_v2_Controls_Common_MyTableRowElement$get_rowIndex() {
        /// <value type="Number" integer="true"></value>
        return this.get_domElement().rowIndex;
    },
    
    appendChild: function js_com_cs_v2_Controls_Common_MyTableRowElement$appendChild(obj) {
        /// <param name="obj" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (Type.canCast(obj, js.com.cs.v2.Controls.Common.MyTableCellElement)) {
            throw new Error('Please use the InsertCell method as adding a cell via appendChild is not compatible with all browsers');
        }
        return js.com.cs.v2.Controls.Common.MyTableRowElement.callBase(this, 'appendChild', [ obj ]);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Common.MyUnOrderedListElem

js.com.cs.v2.Controls.Common.MyUnOrderedListElem = function js_com_cs_v2_Controls_Common_MyUnOrderedListElem(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v2.Controls.Common.MyUnOrderedListElem.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('ul') : domElement ]);
}


Type.createNamespace('js.com.cs.v2.Controls.Form.Enums');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE

js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE = function() { 
    /// <field name="checkBox" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxSingleLine" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="radioButton" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textArea" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="select" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="button" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxMultiLine" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxHidden" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxPassword" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="fileUpload" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.prototype = {
    checkBox: 0, 
    textBoxSingleLine: 1, 
    radioButton: 2, 
    textArea: 3, 
    select: 4, 
    button: 5, 
    textBoxMultiLine: 7, 
    textBoxHidden: 8, 
    textBoxPassword: 9, 
    fileUpload: 10
}
js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.createEnum('js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE', false);


Type.createNamespace('js.com.cs.v2.Controls.Form');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.IMyBaseFormElement

js.com.cs.v2.Controls.Form.IMyBaseFormElement = function() { 
};
js.com.cs.v2.Controls.Form.IMyBaseFormElement.prototype = {
    get_myDomElement : null,
    get_controlType : null,
    get_disabled : null,
    set_disabled : null,
    enable : null,
    disable : null,
    focus : null,
    blur : null,
    clear : null,
    getFieldFromFormsCollection : null,
    add_onChange : null,
    remove_onChange : null,
    get_valueObject : null,
    set_valueObject : null,
    createFieldForFormElement : null
}
js.com.cs.v2.Controls.Form.IMyBaseFormElement.createInterface('js.com.cs.v2.Controls.Form.IMyBaseFormElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.IMyButtonElement

js.com.cs.v2.Controls.Form.IMyButtonElement = function() { 
};
js.com.cs.v2.Controls.Form.IMyButtonElement.prototype = {
    performClick : null,
    createButtonForFormElement : null
}
js.com.cs.v2.Controls.Form.IMyButtonElement.createInterface('js.com.cs.v2.Controls.Form.IMyButtonElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyBaseButton

js.com.cs.v2.Controls.Form.MyBaseButton = function js_com_cs_v2_Controls_Form_MyBaseButton(dom) {
    /// <param name="dom" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyBaseButton.constructBase(this, [ dom ]);
}
js.com.cs.v2.Controls.Form.MyBaseButton.prototype = {
    
    createButtonForFormElement: function js_com_cs_v2_Controls_Form_MyBaseButton$createButtonForFormElement(validateFormOnClick, validationGroup, isDefaultButton, confirmMsg) {
        /// <param name="validateFormOnClick" type="Boolean">
        /// </param>
        /// <param name="validationGroup" type="String">
        /// </param>
        /// <param name="isDefaultButton" type="Boolean">
        /// </param>
        /// <param name="confirmMsg" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Button"></returns>
        var btn = new js.com.cs.v2.UI.Forms.Button(this.get_domElement(), validateFormOnClick, validationGroup, isDefaultButton, confirmMsg);
        return btn;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyBaseFormElement

js.com.cs.v2.Controls.Form.MyBaseFormElement = function js_com_cs_v2_Controls_Form_MyBaseFormElement(dom) {
    /// <param name="dom" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="_lastEvent$1" type="js.com.JQueryScriptSharp.JQueryEvent">
    /// </field>
    /// <field name="_lastCheckedValue$1" type="Object">
    /// </field>
    /// <field name="__onChangeEvenWithKeys$1" type="js.com.JQueryScriptSharp.EventCallback">
    /// </field>
    js.com.cs.v2.Controls.Form.MyBaseFormElement.constructBase(this, [ dom ]);
    this._initHandlers$1();
}
js.com.cs.v2.Controls.Form.MyBaseFormElement.getFormElement = function js_com_cs_v2_Controls_Form_MyBaseFormElement$getFormElement(elementID) {
    /// <summary>
    /// Gets the form element based on the element ID
    /// </summary>
    /// <param name="elementID" type="Object" domElement="true">
    /// </param>
    /// <returns type="js.com.cs.v2.Controls.Form.IMyBaseFormElement"></returns>
    if (Type.canCast(elementID, String)) {
        elementID = document.getElementById(elementID);
    }
    var domElement = elementID;
    var tagName = domElement.tagName.toLowerCase();
    var attribType = '';
    if (domElement.attributes.getNamedItem('type') != null) {
        attribType = domElement.attributes.getNamedItem('type').value.toLowerCase();
    }
    var formElem = null;
    switch (tagName) {
        case 'input':
            var txt = js.com.cs.v2.Controls.Form.MyTextBox.getTextBoxFromElement(domElement);
            if (txt == null) {
                switch (attribType) {
                    case 'checkbox':
                        var chk = new js.com.cs.v2.Controls.Form.MyCheckBox(domElement);
                        formElem = chk;
                        break;
                    case 'file':
                        var fu = new js.com.cs.v2.Controls.Form.MyFileUpload(domElement);
                        formElem = fu;
                        break;
                    case 'radio':
                        var radio = new js.com.cs.v2.Controls.Form.MyRadioButton(domElement);
                        formElem = radio;
                        break;
                }
            }
            else {
                formElem = txt;
            }
            break;
        case 'textarea':
            var txt = new js.com.cs.v2.Controls.Form.MyTextBoxMultiLine(domElement);
            formElem = txt;
            break;
        case 'select':
            var cmb = new js.com.cs.v2.Controls.Form.MyDropDownList(domElement);
            formElem = cmb;
            break;
    }
    return formElem;
}
js.com.cs.v2.Controls.Form.MyBaseFormElement.prototype = {
    _lastEvent$1: null,
    _lastCheckedValue$1: false,
    
    add_onChangeEvenWithKeys: function js_com_cs_v2_Controls_Form_MyBaseFormElement$add_onChangeEvenWithKeys(value) {
        /// <summary>
        /// A common event to attach to which is triggered once only, with keys, mouse and everything and
        /// not when it leaves focus but immediately
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangeEvenWithKeys$1 = Delegate.combine(this.__onChangeEvenWithKeys$1, value);
    },
    remove_onChangeEvenWithKeys: function js_com_cs_v2_Controls_Form_MyBaseFormElement$remove_onChangeEvenWithKeys(value) {
        /// <summary>
        /// A common event to attach to which is triggered once only, with keys, mouse and everything and
        /// not when it leaves focus but immediately
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangeEvenWithKeys$1 = Delegate.remove(this.__onChangeEvenWithKeys$1, value);
    },
    
    __onChangeEvenWithKeys$1: null,
    
    getFieldFromFormsCollection: function js_com_cs_v2_Controls_Form_MyBaseFormElement$getFieldFromFormsCollection() {
        /// <returns type="js.com.cs.v2.UI.Forms.Field"></returns>
        return js.com.cs.v2.UI.Forms.FormsCollection.get_instance().getFieldByID(this.get_id());
    },
    
    onMouseClickUp: function js_com_cs_v2_Controls_Form_MyBaseFormElement$onMouseClickUp(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._lastEvent$1 = e;
        window.setTimeout(Delegate.create(this, this.triggerEventIfChanged), 10);
    },
    
    onKeyboardUp: function js_com_cs_v2_Controls_Form_MyBaseFormElement$onKeyboardUp(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._lastEvent$1 = e;
        window.setTimeout(Delegate.create(this, this.triggerEventIfChanged), 10);
    },
    
    _onValueChanged$1: function js_com_cs_v2_Controls_Form_MyBaseFormElement$_onValueChanged$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._lastEvent$1 = e;
        window.setTimeout(Delegate.create(this, this.triggerEventIfChanged), 1000);
    },
    
    triggerEventIfChanged: function js_com_cs_v2_Controls_Form_MyBaseFormElement$triggerEventIfChanged() {
        if (this.get_valueObject() !== this._lastCheckedValue$1) {
            this._lastCheckedValue$1 = this.get_valueObject();
            if (this.__onChangeEvenWithKeys$1 != null) {
                this.__onChangeEvenWithKeys$1.invoke(this._lastEvent$1);
                this._lastEvent$1 = null;
            }
        }
    },
    
    _initHandlers$1: function js_com_cs_v2_Controls_Form_MyBaseFormElement$_initHandlers$1() {
        this._lastCheckedValue$1 = this.get_valueObject();
        this.add_onChange(Delegate.create(this, this._onValueChanged$1));
        this.add_onKeyUp(Delegate.create(this, this.onKeyboardUp));
        this.add_onMouseUp(Delegate.create(this, this.onMouseClickUp));
    },
    
    createFieldForFormElement: function js_com_cs_v2_Controls_Form_MyBaseFormElement$createFieldForFormElement(title, validationParams, validationGroup, customCSSClasses, groupParams) {
        /// <param name="title" type="String">
        /// </param>
        /// <param name="validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
        /// </param>
        /// <param name="validationGroup" type="String">
        /// </param>
        /// <param name="customCSSClasses" type="js.com.cs.v2.UI.Forms.DefaultCSSClasses">
        /// </param>
        /// <param name="groupParams" type="js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Field"></returns>
        var field = new js.com.cs.v2.UI.Forms.Field(this.get_domElement(), title, validationParams, validationGroup, customCSSClasses, groupParams);
        return field;
    },
    
    get_text: function js_com_cs_v2_Controls_Form_MyBaseFormElement$get_text() {
        /// <value type="String"></value>
        return this.get_value();
    },
    set_text: function js_com_cs_v2_Controls_Form_MyBaseFormElement$set_text(value) {
        /// <value type="String"></value>
        this.set_value(value);
        return value;
    },
    
    get_value: function js_com_cs_v2_Controls_Form_MyBaseFormElement$get_value() {
        /// <value type="String"></value>
        return this.get_domElement().value;
    },
    set_value: function js_com_cs_v2_Controls_Form_MyBaseFormElement$set_value(value) {
        /// <value type="String"></value>
        this._lastCheckedValue$1 = value;
        this.get_domElement().value = value;
        return value;
    },
    
    get_valueObject: function js_com_cs_v2_Controls_Form_MyBaseFormElement$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_value();
    },
    set_valueObject: function js_com_cs_v2_Controls_Form_MyBaseFormElement$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_value(value);
        return value;
    },
    
    clear: function js_com_cs_v2_Controls_Form_MyBaseFormElement$clear() {
        this.set_value('');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyButton

js.com.cs.v2.Controls.Form.MyButton = function js_com_cs_v2_Controls_Form_MyButton(btn) {
    /// <param name="btn" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyButton.constructBase(this, [ (isNullOrUndefined(btn)) ? document.createElement('input') : btn ]);
    this.get_domElement().type = 'button';
}
js.com.cs.v2.Controls.Form.MyButton.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyButton$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyButton.callBase(this, 'get_domElement');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyCheckBox

js.com.cs.v2.Controls.Form.MyCheckBox = function js_com_cs_v2_Controls_Form_MyCheckBox(chk) {
    /// <param name="chk" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyCheckBox.constructBase(this, [ (isNullOrUndefined(chk)) ? document.createElement('input') : chk ]);
    this.get_domElement().type = 'checkbox';
}
js.com.cs.v2.Controls.Form.MyCheckBox.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyCheckBox$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyCheckBox.callBase(this, 'get_domElement');
    },
    
    get_checked: function js_com_cs_v2_Controls_Form_MyCheckBox$get_checked() {
        /// <value type="Boolean"></value>
        return this.get_domElement().checked;
    },
    set_checked: function js_com_cs_v2_Controls_Form_MyCheckBox$set_checked(value) {
        /// <value type="Boolean"></value>
        this.get_domElement().checked = value;
        return value;
    },
    
    clear: function js_com_cs_v2_Controls_Form_MyCheckBox$clear() {
        this.get_domElement().checked = false;
    },
    
    get_value: function js_com_cs_v2_Controls_Form_MyCheckBox$get_value() {
        /// <value type="Boolean"></value>
        return this.get_checked();
    },
    set_value: function js_com_cs_v2_Controls_Form_MyCheckBox$set_value(value) {
        /// <value type="Boolean"></value>
        var val = value;
        if (Type.canCast(value, String)) {
            val = !String.isNullOrEmpty((value));
        }
        else if (Type.canCast(val, Number)) {
            val = (val) !== 0;
        }
        this.set_checked(val);
        return value;
    },
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyCheckBox$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox;
    },
    
    get_valueObject: function js_com_cs_v2_Controls_Form_MyCheckBox$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_checked();
    },
    set_valueObject: function js_com_cs_v2_Controls_Form_MyCheckBox$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_checked(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyDropDownList

js.com.cs.v2.Controls.Form.MyDropDownList = function js_com_cs_v2_Controls_Form_MyDropDownList(txt, initialDisabledIndices) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <param name="initialDisabledIndices" type="Array" elementType="Number" elementInteger="true">
    /// </param>
    /// <field name="_lastSelectedIndexIE6Workaround$2" type="Number" integer="true">
    /// </field>
    js.com.cs.v2.Controls.Form.MyDropDownList.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('select') : txt ]);
    this._initHandlers$2();
    this._initDisabledOptions$2(initialDisabledIndices);
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._selectFirstNotDisabledOption$2));
}
js.com.cs.v2.Controls.Form.MyDropDownList.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyDropDownList$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyDropDownList.callBase(this, 'get_domElement');
    },
    
    _lastSelectedIndexIE6Workaround$2: 0,
    
    _selectFirstNotDisabledOption$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_selectFirstNotDisabledOption$2() {
        var isOneSelected = false;
        for (var i = 0; i < this.get_options().length; i++) {
            var selectedAttribute = Type.safeCast(this.get_options()[i].getAttribute('selected'), String);
            if (!String.isNullOrEmpty(selectedAttribute)) {
                selectedAttribute = selectedAttribute.toString().toLowerCase();
            }
            if (selectedAttribute === 'selected' && !this.get_options()[i].disabled) {
                isOneSelected = true;
                break;
            }
        }
        if (!isOneSelected) {
            for (var i = 0; i < this.get_options().length; i++) {
                if (!this.get_options()[i].disabled) {
                    this.set_selectedIndex(i);
                    break;
                }
            }
        }
    },
    
    _initDisabledOptions$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_initDisabledOptions$2(initialDisabledIndices) {
        /// <summary>
        /// Used for ASP.net since disabled is not available
        /// </summary>
        /// <param name="initialDisabledIndices" type="Array" elementType="Number" elementInteger="true">
        /// </param>
        if (!isNullOrUndefined(initialDisabledIndices)) {
            for (var j = 0; j < initialDisabledIndices.length; j++) {
                if (initialDisabledIndices[j] < this.get_options().length) {
                    this.get_options()[initialDisabledIndices[j]].disabled = true;
                }
            }
            if (js.com.cs.v2.Util.GeneralUtil.isIE6()) {
                this._ie6DisabledWorkaroundEmulate$2();
            }
        }
    },
    
    _initHandlers$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_initHandlers$2() {
        if (js.com.cs.v2.Util.GeneralUtil.isIE6()) {
            js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._setIE6DisabledWorkaround$2));
        }
    },
    
    _setIE6DisabledWorkaround$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_setIE6DisabledWorkaround$2() {
        this.add_onFocus(Delegate.create(this, this._myDropDownList_onFocus$2));
        this.add_onChangeEvenWithKeys(Delegate.create(this, this._myDropDownList_onChange$2));
        this._ie6DisabledWorkaroundEmulate$2();
    },
    
    _myDropDownList_onChange$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_myDropDownList_onChange$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._ie6DisabledWorkaroundRestore$2();
    },
    
    _myDropDownList_onFocus$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_myDropDownList_onFocus$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._lastSelectedIndexIE6Workaround$2 = this.get_selectedIndex();
    },
    
    _ie6DisabledWorkaroundRestore$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_ie6DisabledWorkaroundRestore$2() {
        if (this.get_options()[this.get_selectedIndex()] != null && this.get_options()[this.get_selectedIndex()].disabled) {
        }
    },
    
    _ie6DisabledWorkaroundEmulate$2: function js_com_cs_v2_Controls_Form_MyDropDownList$_ie6DisabledWorkaroundEmulate$2() {
        for (var i = 0; i < this.get_options().length; i++) {
            if (this.get_options()[i].disabled) {
                this.get_options()[i].style.color = 'graytext';
            }
            else {
                this.get_options()[i].style.color = 'menutext';
            }
        }
    },
    
    get_selectedIndex: function js_com_cs_v2_Controls_Form_MyDropDownList$get_selectedIndex() {
        /// <value type="Number" integer="true"></value>
        return this.get_domElement().selectedIndex;
    },
    set_selectedIndex: function js_com_cs_v2_Controls_Form_MyDropDownList$set_selectedIndex(value) {
        /// <value type="Number" integer="true"></value>
        this.get_domElement().selectedIndex = value;
        return value;
    },
    
    clearItems: function js_com_cs_v2_Controls_Form_MyDropDownList$clearItems() {
        var origLen = this.get_domElement().options.length;
        for (var i = 0; i < origLen; i++) {
            this.get_domElement().remove(0);
        }
    },
    
    removeItem: function js_com_cs_v2_Controls_Form_MyDropDownList$removeItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        this.get_domElement().remove(index);
    },
    
    addItem: function js_com_cs_v2_Controls_Form_MyDropDownList$addItem(txt, value) {
        /// <param name="txt" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        if (isNullOrUndefined(value)) {
            value = txt;
        }
        var elem = document.createElement('option');
        elem.value = value;
        elem.text = txt;
        try {
            this.get_domElement().add(elem, null);
        }
        catch (ex) {
            var a = this.get_domElement().options;
            a[a.length] = elem;
        }
    },
    
    addItemFromOption: function js_com_cs_v2_Controls_Form_MyDropDownList$addItemFromOption(option) {
        /// <param name="option" type="Object" domElement="true">
        /// </param>
        this.addItem(option.text, option.value);
    },
    
    get_options: function js_com_cs_v2_Controls_Form_MyDropDownList$get_options() {
        /// <value type="DOMElementCollection"></value>
        return this.get_domElement().options;
    },
    
    callChange: function js_com_cs_v2_Controls_Form_MyDropDownList$callChange() {
        var obj = this.onchange;
        if (obj != null) {
            this.onchange();
        }
    },
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyDropDownList$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.select;
    },
    
    get_selectedText: function js_com_cs_v2_Controls_Form_MyDropDownList$get_selectedText() {
        /// <value type="String"></value>
        for (var i = 0; i < this.get_options().length; i++) {
            var option = this.get_options()[i];
            var attrValue = option.attributes.getNamedItem('value');
            if (attrValue != null && attrValue.value === this.get_value()) {
                return option.innerHTML;
            }
        }
        return null;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyFileUpload

js.com.cs.v2.Controls.Form.MyFileUpload = function js_com_cs_v2_Controls_Form_MyFileUpload(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyFileUpload.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt ]);
    this.get_domElement().type = 'file';
}
js.com.cs.v2.Controls.Form.MyFileUpload.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyFileUpload$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyFileUpload.callBase(this, 'get_domElement');
    },
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyFileUpload$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.fileUpload;
    },
    
    get_valueObject: function js_com_cs_v2_Controls_Form_MyFileUpload$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_value();
    },
    set_valueObject: function js_com_cs_v2_Controls_Form_MyFileUpload$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_value(value);
        return value;
    },
    
    uploadify: function js_com_cs_v2_Controls_Form_MyFileUpload$uploadify(settings) {
        /// <param name="settings" type="js.com.JQueryScriptSharp._UploadifySettings">
        /// </param>
        this.get_jQueryElement().uploadify(settings);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyRadioButton

js.com.cs.v2.Controls.Form.MyRadioButton = function js_com_cs_v2_Controls_Form_MyRadioButton(radioButton) {
    /// <param name="radioButton" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyRadioButton.constructBase(this, [ (isNullOrUndefined(radioButton)) ? document.createElement('input') : radioButton ]);
    this.get_domElement().type = 'radio';
    this._init$2();
}
js.com.cs.v2.Controls.Form.MyRadioButton.updateRadioListInitialChecked = function js_com_cs_v2_Controls_Form_MyRadioButton$updateRadioListInitialChecked(elemID) {
    /// <summary>
    /// A method which is used to make sure that if a radio button is checked, it is checked
    /// </summary>
    /// <param name="elemID" type="String">
    /// </param>
    var jInput = js.com.JQueryScriptSharp.jQueryUtil.select('input[type=\'radio\']', js.com.JQueryScriptSharp.jQueryUtil.selectById(elemID));
    for (var i = 0; i < jInput.length; i++) {
        var rd = new js.com.cs.v2.Controls.Form.MyRadioButton(jInput.get(i));
        var attrChecked = rd.get_domElement().attributes.getNamedItem('checked');
        if (attrChecked != null) {
            if (attrChecked.value.toLowerCase() === 'checked' || attrChecked.value.toLowerCase() === 'true') {
                rd.set_checked(true);
            }
        }
    }
}
js.com.cs.v2.Controls.Form.MyRadioButton.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyRadioButton$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyRadioButton.callBase(this, 'get_domElement');
    },
    
    _initHandlers$2: function js_com_cs_v2_Controls_Form_MyRadioButton$_initHandlers$2() {
        js.com.cs.v2.Util.WindowUtil.add_onKeyUp(Delegate.create(this, this.onKeyboardUp));
        js.com.cs.v2.Util.WindowUtil.add_onMouseUp(Delegate.create(this, this.onMouseClickUp));
        this.remove_onKeyUp(Delegate.create(this, this.onKeyboardUp));
        this.remove_onMouseUp(Delegate.create(this, this.onMouseClickUp));
    },
    
    _init$2: function js_com_cs_v2_Controls_Form_MyRadioButton$_init$2() {
        this._initHandlers$2();
    },
    
    get_checked: function js_com_cs_v2_Controls_Form_MyRadioButton$get_checked() {
        /// <value type="Boolean"></value>
        return this.get_domElement().checked;
    },
    set_checked: function js_com_cs_v2_Controls_Form_MyRadioButton$set_checked(value) {
        /// <value type="Boolean"></value>
        this.get_domElement().checked = value;
        return value;
    },
    
    clear: function js_com_cs_v2_Controls_Form_MyRadioButton$clear() {
        this.get_domElement().checked = false;
    },
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyRadioButton$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton;
    },
    
    get_valueObject: function js_com_cs_v2_Controls_Form_MyRadioButton$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_checked();
    },
    set_valueObject: function js_com_cs_v2_Controls_Form_MyRadioButton$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_checked(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyTextBox

js.com.cs.v2.Controls.Form.MyTextBox = function js_com_cs_v2_Controls_Form_MyTextBox(txt, type) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <param name="type" type="String">
    /// </param>
    js.com.cs.v2.Controls.Form.MyTextBox.constructBase(this, [ txt ]);
    if (type != null && this.get_domElement().type !== type) {
        if (js.com.cs.v2.Util.GeneralUtil.isIE() > 0 && this.get_domElement().parentNode != null) {
            var e = document.createElement('input');
            e.type = type;
            this._jQueryElement.before(e);
            this.get_domElement().parentNode.removeChild(this.get_domElement());
            e.id = this.get_domElement().id;
            this._jQueryElement = js.com.JQueryScriptSharp.jQueryUtil.selectByElements(e);
        }
        else {
            this.get_domElement().type = type;
        }
    }
}
js.com.cs.v2.Controls.Form.MyTextBox.getTextBoxFromElement = function js_com_cs_v2_Controls_Form_MyTextBox$getTextBoxFromElement(element) {
    /// <param name="element" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="js.com.cs.v2.Controls.Form.MyTextBox"></returns>
    element = js.com.cs.v2.Controls.Common.MyDOMElement.getElement(element);
    var txt = null;
    if (element != null) {
        if (element.get_tagName() === 'input') {
            switch (element.get_tagType()) {
                case 'hidden':
                    txt = new js.com.cs.v2.Controls.Form.MyTextBoxHidden(element.get_domElement());
                    break;
                case 'password':
                    txt = new js.com.cs.v2.Controls.Form.MyTextBoxPassword(element.get_domElement());
                    break;
                case 'text':
                case '':
                    txt = new js.com.cs.v2.Controls.Form.MyTextBoxSingleLine(element.get_domElement());
                    break;
            }
        }
        else if (element.get_tagName() === 'textarea') {
            txt = new js.com.cs.v2.Controls.Form.MyTextBoxMultiLine(element.get_domElement());
        }
    }
    return txt;
}
js.com.cs.v2.Controls.Form.MyTextBox.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyTextBox$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyTextBox.callBase(this, 'get_domElement');
    },
    
    select: function js_com_cs_v2_Controls_Form_MyTextBox$select() {
        this.get_domElement().select(null);
    },
    
    get_autoComplete: function js_com_cs_v2_Controls_Form_MyTextBox$get_autoComplete() {
        /// <value type="Boolean"></value>
        var val = this.get_jQueryElement().attr('autocomplete');
        if (val != null) {
            var sVal = val;
            if (sVal.toLowerCase() === 'off') {
                return false;
            }
        }
        return true;
    },
    set_autoComplete: function js_com_cs_v2_Controls_Form_MyTextBox$set_autoComplete(value) {
        /// <value type="Boolean"></value>
        this.get_jQueryElement().attr('autocomplete', (value) ? null : 'off');
        return value;
    },
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyTextBox$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxSingleLine;
    },
    
    get_valueObject: function js_com_cs_v2_Controls_Form_MyTextBox$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_text();
    },
    set_valueObject: function js_com_cs_v2_Controls_Form_MyTextBox$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_text(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyTextBoxHidden

js.com.cs.v2.Controls.Form.MyTextBoxHidden = function js_com_cs_v2_Controls_Form_MyTextBoxHidden(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyTextBoxHidden.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'hidden' ]);
}
js.com.cs.v2.Controls.Form.MyTextBoxHidden.prototype = {
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyTextBoxHidden$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxHidden;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyTextBoxMultiLine

js.com.cs.v2.Controls.Form.MyTextBoxMultiLine = function js_com_cs_v2_Controls_Form_MyTextBoxMultiLine(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyTextBoxMultiLine.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('textarea') : txt, null ]);
}
js.com.cs.v2.Controls.Form.MyTextBoxMultiLine.prototype = {
    
    get_domElement: function js_com_cs_v2_Controls_Form_MyTextBoxMultiLine$get_domElement() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v2.Controls.Form.MyTextBoxMultiLine.callBase(this, 'get_domElement');
    },
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyTextBoxMultiLine$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxMultiLine;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyTextBoxPassword

js.com.cs.v2.Controls.Form.MyTextBoxPassword = function js_com_cs_v2_Controls_Form_MyTextBoxPassword(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyTextBoxPassword.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'password' ]);
}
js.com.cs.v2.Controls.Form.MyTextBoxPassword.prototype = {
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyTextBoxPassword$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxPassword;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.MyTextBoxSingleLine

js.com.cs.v2.Controls.Form.MyTextBoxSingleLine = function js_com_cs_v2_Controls_Form_MyTextBoxSingleLine(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v2.Controls.Form.MyTextBoxSingleLine.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'text' ]);
}
js.com.cs.v2.Controls.Form.MyTextBoxSingleLine.prototype = {
    
    get_controlType: function js_com_cs_v2_Controls_Form_MyTextBoxSingleLine$get_controlType() {
        /// <value type="js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxSingleLine;
    }
}


Type.createNamespace('js.com.cs.v2.Controls.Form.Specialized');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenu

js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenu = function js_com_cs_v2_Controls_Form_Specialized_MyDropDownListMenu() {
    /// <field name="cmbParent" type="js.com.cs.v2.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="cmbChild" type="js.com.cs.v2.Controls.Form.MyDropDownList">
    /// </field>
}
js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenu.prototype = {
    cmbParent: null,
    cmbChild: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenuListItem

js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenuListItem = function js_com_cs_v2_Controls_Form_Specialized_MyDropDownListMenuListItem(txt, value) {
    /// <param name="txt" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <field name="_subItems$1" type="js.com.cs.v2.Classes.General.Arrays.MyArray">
    /// List of ListItem
    /// </field>
    js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenuListItem.constructBase(this, [ txt, value ]);
    this._subItems$1 = new js.com.cs.v2.Classes.General.Arrays.MyArray();
}
js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenuListItem.prototype = {
    _subItems$1: null,
    
    addSubItem: function js_com_cs_v2_Controls_Form_Specialized_MyDropDownListMenuListItem$addSubItem(txt, value) {
        /// <param name="txt" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        var li = new js.com.cs.v2.Classes.General.ListItem(txt, value);
        this._subItems$1.push(li);
    },
    
    addSubItemsToField: function js_com_cs_v2_Controls_Form_Specialized_MyDropDownListMenuListItem$addSubItemsToField(cmb) {
        /// <param name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
        /// </param>
        cmb.clearItems();
        for (var i = 0; i < this._subItems$1.get_length(); i++) {
            var li = this._subItems$1.get_item(i);
            cmb.addItem(li.text, li.value);
        }
    }
}


Type.createNamespace('js.com.cs.v2.Controls.Specialized.Tree');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Specialized.Tree.Tree

js.com.cs.v2.Controls.Specialized.Tree.Tree = function js_com_cs_v2_Controls_Specialized_Tree_Tree(domElement) {
    /// <param name="domElement" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="rootNodes" type="Array" elementType="TreeItem">
    /// </field>
    /// <field name="domElement" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    this.domElement = domElement;
    this.rootNodes = [];
}
js.com.cs.v2.Controls.Specialized.Tree.Tree.prototype = {
    rootNodes: null,
    domElement: null,
    
    renderTree: function js_com_cs_v2_Controls_Specialized_Tree_Tree$renderTree() {
        this.domElement.clear();
        var ul = new js.com.cs.v2.Controls.Common.MyUnOrderedListElem();
        this.domElement.appendChild(ul);
        for (var i = 0; i < this.rootNodes.length; i++) {
            ul.appendChild(this.rootNodes[i].getAsListItemElem());
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Controls.Specialized.Tree.TreeItem

js.com.cs.v2.Controls.Specialized.Tree.TreeItem = function js_com_cs_v2_Controls_Specialized_Tree_TreeItem(ID, title, isSelected, cssClassNormal, cssClassSelected) {
    /// <param name="ID" type="String">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="isSelected" type="Boolean">
    /// </param>
    /// <param name="cssClassNormal" type="String">
    /// </param>
    /// <param name="cssClassSelected" type="String">
    /// </param>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="cssClass_Normal" type="String">
    /// </field>
    /// <field name="cssClass_Selected" type="String">
    /// </field>
    /// <field name="click" type="EventHandler">
    /// </field>
    /// <field name="children" type="Array" elementType="TreeItem">
    /// </field>
    /// <field name="isSelected" type="Boolean">
    /// </field>
    this.id = ID;
    this.title = title;
    this.isSelected = this.isSelected;
    this.cssClass_Normal = cssClassNormal;
    this.cssClass_Selected = cssClassSelected;
    this.children = [];
}
js.com.cs.v2.Controls.Specialized.Tree.TreeItem.prototype = {
    title: null,
    id: null,
    cssClass_Normal: null,
    cssClass_Selected: null,
    click: null,
    children: null,
    isSelected: false,
    
    getAsListItemElem: function js_com_cs_v2_Controls_Specialized_Tree_TreeItem$getAsListItemElem() {
        /// <returns type="js.com.cs.v2.Controls.Common.MyListItemElem"></returns>
        var li = new js.com.cs.v2.Controls.Common.MyListItemElem();
        var divTitle = new js.com.cs.v2.Controls.Common.MyDivElement();
        divTitle.set_innerText(this.title);
        li.appendChild(divTitle);
        if (this.children != null && this.children.length > 0) {
            var ul = new js.com.cs.v2.Controls.Common.MyUnOrderedListElem();
            li.appendChild(ul);
            for (var i = 0; i < this.children.length; i++) {
                ul.appendChild(this.children[i].getAsListItemElem());
            }
        }
        return li;
    },
    
    addChild: function js_com_cs_v2_Controls_Specialized_Tree_TreeItem$addChild(treeItem) {
        /// <param name="treeItem" type="js.com.cs.v2.Controls.Specialized.Tree.TreeItem">
        /// </param>
        js.com.cs.v2.Util.ArrayUtil.addItemInArray(this.children, treeItem);
    },
    
    removeChild: function js_com_cs_v2_Controls_Specialized_Tree_TreeItem$removeChild(treeItem) {
        /// <param name="treeItem" type="js.com.cs.v2.Controls.Specialized.Tree.TreeItem">
        /// </param>
        var sID = '';
        if (Type.canCast(treeItem, js.com.cs.v2.Controls.Specialized.Tree.TreeItem)) {
            sID = treeItem.id;
        }
        else {
            sID = treeItem;
        }
        for (var i = 0; i < this.children.length; i++) {
            if (this.children[i].id === sID) {
                js.com.cs.v2.Util.ArrayUtil.removeItemFromArray(this.children, i);
                break;
            }
        }
    }
}


Type.createNamespace('js.com.cs.v2.Core');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Core.Destroyable

js.com.cs.v2.Core.Destroyable = function js_com_cs_v2_Core_Destroyable() {
    /// <field name="_destroyed" type="Boolean">
    /// </field>
}
js.com.cs.v2.Core.Destroyable.prototype = {
    _destroyed: false,
    
    get_destroyed: function js_com_cs_v2_Core_Destroyable$get_destroyed() {
        /// <value type="Boolean"></value>
        return this._destroyed;
    },
    
    destroy: function js_com_cs_v2_Core_Destroyable$destroy() {
        this._destroyed = true;
    }
}


Type.createNamespace('js.com.cs.v2.Enums');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Enums.POSITION

js.com.cs.v2.Enums.POSITION = function() { 
    /// <field name="top" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="topRight" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bottomRight" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bottom" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bottomLeft" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="topLeft" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="center" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Enums.POSITION.prototype = {
    top: 0, 
    topRight: 10, 
    right: 20, 
    bottomRight: 30, 
    bottom: 40, 
    bottomLeft: 50, 
    left: 60, 
    topLeft: 70, 
    center: 80
}
js.com.cs.v2.Enums.POSITION.createEnum('js.com.cs.v2.Enums.POSITION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Enums.KEY

js.com.cs.v2.Enums.KEY = function() { 
    /// <field name="bacK_SPACE" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="TAB" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="ENTER" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="SHIFT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="CTRL" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="ALT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="pausE_BREAK" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="capS_LOCK" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="ESCAPE" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="pagE_UP" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="pagE_DOWN" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="END" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="HOME" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="lefT_ARROW" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="uP_ARROW" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="righT_ARROW" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="dowN_ARROW" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="INSERT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="DELETE" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="lefT_WINDOW_KEY" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="righT_WINDOW_KEY" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="selecT_KEY" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_0" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_1" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_2" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_3" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_4" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_5" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_6" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_7" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_8" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_9" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_MULTIPLY" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_ADD" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_SUBTRACT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_DECIMAL_POINT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numpaD_DIVIDE" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f1" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f2" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f3" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f4" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f5" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f6" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f7" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f8" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f9" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f10" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f11" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="f12" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="nuM_LOCK" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="scrolL_LOCK" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="semI_COLON" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="equaL_SIGN" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="COMMA" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="DASH" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="PERIOD" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="forwarD_SLASH" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="gravE_ACCENT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="opeN_BRACKET" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bacK_SLASH" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="closE_BRACKET" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="singlE_QUOTE" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Enums.KEY.prototype = {
    bacK_SPACE: 8, 
    TAB: 9, 
    ENTER: 13, 
    SHIFT: 16, 
    CTRL: 17, 
    ALT: 18, 
    pausE_BREAK: 19, 
    capS_LOCK: 20, 
    ESCAPE: 27, 
    pagE_UP: 33, 
    pagE_DOWN: 34, 
    END: 35, 
    HOME: 36, 
    lefT_ARROW: 37, 
    uP_ARROW: 38, 
    righT_ARROW: 39, 
    dowN_ARROW: 40, 
    INSERT: 45, 
    DELETE: 46, 
    lefT_WINDOW_KEY: 91, 
    righT_WINDOW_KEY: 92, 
    selecT_KEY: 93, 
    numpaD_0: 96, 
    numpaD_1: 97, 
    numpaD_2: 98, 
    numpaD_3: 99, 
    numpaD_4: 100, 
    numpaD_5: 101, 
    numpaD_6: 102, 
    numpaD_7: 103, 
    numpaD_8: 104, 
    numpaD_9: 105, 
    numpaD_MULTIPLY: 106, 
    numpaD_ADD: 107, 
    numpaD_SUBTRACT: 109, 
    numpaD_DECIMAL_POINT: 110, 
    numpaD_DIVIDE: 111, 
    f1: 112, 
    f2: 113, 
    f3: 114, 
    f4: 115, 
    f5: 116, 
    f6: 117, 
    f7: 118, 
    f8: 119, 
    f9: 120, 
    f10: 121, 
    f11: 122, 
    f12: 123, 
    nuM_LOCK: 144, 
    scrolL_LOCK: 145, 
    semI_COLON: 186, 
    equaL_SIGN: 187, 
    COMMA: 188, 
    DASH: 189, 
    PERIOD: 190, 
    forwarD_SLASH: 191, 
    gravE_ACCENT: 192, 
    opeN_BRACKET: 219, 
    bacK_SLASH: 220, 
    closE_BRACKET: 221, 
    singlE_QUOTE: 222
}
js.com.cs.v2.Enums.KEY.createEnum('js.com.cs.v2.Enums.KEY', false);


Type.createNamespace('js.com.cs.v2.Events');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Events.EventItem

js.com.cs.v2.Events.EventItem = function js_com_cs_v2_Events_EventItem() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Events.EventsHandler

js.com.cs.v2.Events.EventsHandler = function js_com_cs_v2_Events_EventsHandler() {
    /// <field name="events" type="Array" elementType="EventItem">
    /// </field>
    this.events = [];
}
js.com.cs.v2.Events.EventsHandler.prototype = {
    events: null,
    
    addEventListener: function js_com_cs_v2_Events_EventsHandler$addEventListener(eventName, handler) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="Delegate">
        /// </param>
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Events.GenericEventItem

js.com.cs.v2.Events.GenericEventItem = function js_com_cs_v2_Events_GenericEventItem() {
    /// <field name="eventName" type="String">
    /// </field>
    /// <field name="handler" type="Delegate">
    /// </field>
    /// <field name="scope" type="Object">
    /// </field>
}
js.com.cs.v2.Events.GenericEventItem.prototype = {
    eventName: null,
    handler: null,
    scope: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Events.GenericEventsHandler

js.com.cs.v2.Events.GenericEventsHandler = function js_com_cs_v2_Events_GenericEventsHandler() {
    /// <field name="_events" type="Array" elementType="GenericEventItem">
    /// </field>
    this._events = [];
}
js.com.cs.v2.Events.GenericEventsHandler.prototype = {
    _events: null,
    
    addListener: function js_com_cs_v2_Events_GenericEventsHandler$addListener(eventName, handler, scope) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="Delegate">
        /// </param>
        /// <param name="scope" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        if (isNullOrUndefined(scope)) {
            scope = js.com.cs.v2.Util.GeneralUtil.getDelegateScope(handler);
        }
        var item = new js.com.cs.v2.Events.GenericEventItem();
        item.eventName = eventName;
        item.handler = handler;
        item.scope = scope;
        this._events[this._events.length] = item;
        return js.com.cs.v2.Util.GeneralUtil.getDelegateFunction(item.handler);
    },
    
    removeListener: function js_com_cs_v2_Events_GenericEventsHandler$removeListener(eventName, handler, returnDelegateNotFunction) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="Delegate">
        /// </param>
        /// <param name="returnDelegateNotFunction" type="Boolean">
        /// </param>
        /// <returns type="Object"></returns>
        for (var i = 0; i < this._events.length; i++) {
            var item = this._events[i];
            if (item.eventName === eventName && js.com.cs.v2.Util.GeneralUtil.compareDelegate(item.handler, handler)) {
                var method = js.com.cs.v2.Util.GeneralUtil.getDelegateFunction(item.handler);
                (this._events).removeAt(i);
                if (returnDelegateNotFunction) {
                    return item.handler;
                }
                else {
                    return method;
                }
            }
        }
        return null;
    }
}


Type.createNamespace('js.com.cs.v2.Interfaces');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Interfaces.IDestroyable

js.com.cs.v2.Interfaces.IDestroyable = function() { 
};
js.com.cs.v2.Interfaces.IDestroyable.prototype = {
    get_destroyed : null,
    destroy : null
}
js.com.cs.v2.Interfaces.IDestroyable.createInterface('js.com.cs.v2.Interfaces.IDestroyable');


Type.createNamespace('js.com.cs.v2.Time');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Time.Interval

js.com.cs.v2.Time.Interval = function js_com_cs_v2_Time_Interval(delayMS, repeatCount, data) {
    /// <param name="delayMS" type="Number" integer="true">
    /// </param>
    /// <param name="repeatCount" type="Number" integer="true">
    /// </param>
    /// <param name="data" type="Object">
    /// </param>
    /// <field name="__onTick$1" type="js.com.cs.v2.Time.OnTickHandler">
    /// </field>
    /// <field name="_completeTicks$1" type="Number" integer="true">
    /// </field>
    /// <field name="_repeatCount$1" type="Number" integer="true">
    /// </field>
    /// <field name="_data$1" type="Object">
    /// </field>
    /// <field name="_running$1" type="Boolean">
    /// </field>
    /// <field name="_delayMS$1" type="Number" integer="true">
    /// </field>
    /// <field name="_handler$1" type="Number" integer="true">
    /// </field>
    js.com.cs.v2.Time.Interval.constructBase(this);
    this._delayMS$1 = delayMS;
    this._repeatCount$1 = repeatCount;
    this._data$1 = data;
}
js.com.cs.v2.Time.Interval.prototype = {
    
    add_onTick: function js_com_cs_v2_Time_Interval$add_onTick(value) {
        /// <summary>
        /// Triggered with every tick of the interval.  If you return 'false' it will stop the ticking abruptedly
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onTick$1 = Delegate.combine(this.__onTick$1, value);
    },
    remove_onTick: function js_com_cs_v2_Time_Interval$remove_onTick(value) {
        /// <summary>
        /// Triggered with every tick of the interval.  If you return 'false' it will stop the ticking abruptedly
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onTick$1 = Delegate.remove(this.__onTick$1, value);
    },
    
    __onTick$1: null,
    _completeTicks$1: 0,
    _repeatCount$1: 0,
    _data$1: null,
    _running$1: false,
    
    get_running: function js_com_cs_v2_Time_Interval$get_running() {
        /// <value type="Boolean"></value>
        return this._running$1;
    },
    set_running: function js_com_cs_v2_Time_Interval$set_running(value) {
        /// <value type="Boolean"></value>
        this._running$1 = value;
        return value;
    },
    
    get_repeatCount: function js_com_cs_v2_Time_Interval$get_repeatCount() {
        /// <value type="Number" integer="true"></value>
        return this._repeatCount$1;
    },
    set_repeatCount: function js_com_cs_v2_Time_Interval$set_repeatCount(value) {
        /// <value type="Number" integer="true"></value>
        this._repeatCount$1 = value;
        return value;
    },
    
    _delayMS$1: 0,
    
    get_delayMS: function js_com_cs_v2_Time_Interval$get_delayMS() {
        /// <value type="Number" integer="true"></value>
        return this._delayMS$1;
    },
    set_delayMS: function js_com_cs_v2_Time_Interval$set_delayMS(value) {
        /// <value type="Number" integer="true"></value>
        this._delayMS$1 = value;
        if (this._running$1) {
            this.stop();
            this.start();
        }
        return value;
    },
    
    _handler$1: 0,
    
    start: function js_com_cs_v2_Time_Interval$start(reset) {
        /// <param name="reset" type="Boolean">
        /// </param>
        if (isNullOrUndefined(reset)) {
            reset = false;
        }
        if (reset) {
            this.reset();
        }
        if (!this._running$1) {
            this._running$1 = true;
            this._handler$1 = window.setInterval(Delegate.create(this, this._tick$1), this._delayMS$1);
        }
    },
    
    _tick$1: function js_com_cs_v2_Time_Interval$_tick$1() {
        this._completeTicks$1++;
        var doNotForceStop = true;
        if (this.__onTick$1 != null) {
            doNotForceStop = this.__onTick$1.invoke(this, this._completeTicks$1, this._data$1);
        }
        if (this._completeTicks$1 === this._repeatCount$1 || !doNotForceStop) {
            this.stop();
        }
    },
    
    reset: function js_com_cs_v2_Time_Interval$reset() {
        this._completeTicks$1 = 0;
    },
    
    stop: function js_com_cs_v2_Time_Interval$stop() {
        if (this._running$1) {
            this._running$1 = false;
            window.clearInterval(this._handler$1);
        }
    },
    
    destroy: function js_com_cs_v2_Time_Interval$destroy() {
        this.stop();
        js.com.cs.v2.Time.Interval.callBase(this, 'destroy');
    }
}


Type.createNamespace('js.com.cs.v2.UI.Accordion');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Accordion.Accordion

js.com.cs.v2.UI.Accordion.Accordion = function js_com_cs_v2_UI_Accordion_Accordion(info) {
    /// <param name="info" type="js.com.cs.v2.UI.Accordion.AccordionDetails">
    /// </param>
    /// <field name="_mainUL" type="jQuery">
    /// </field>
    /// <field name="_slideDuration" type="Number" integer="true">
    /// </field>
    /// <field name="_liChildren" type="jQuery">
    /// </field>
    /// <field name="_mouseOverUL_private" type="Boolean">
    /// </field>
    /// <field name="_currUL" type="jQuery">
    /// </field>
    /// <field name="_openIfContainsCheckedItems" type="Boolean">
    /// </field>
    /// <field name="_allowMultiple" type="Boolean">
    /// </field>
    /// <field name="_openedElements" type="Array">
    /// </field>
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
    this._mainUL = info.ulElement;
    this._slideDuration = info.slideDuration;
    this._allowMultiple = info.allowMultipleOpen;
    this._openIfContainsCheckedItems = info.openIfContainsCheckedItems;
    this._openedElements = [];
}
js.com.cs.v2.UI.Accordion.Accordion.prototype = {
    _mainUL: null,
    _slideDuration: 0,
    _liChildren: null,
    _mouseOverUL_private: false,
    _currUL: null,
    _openIfContainsCheckedItems: false,
    
    get__mouseOverUL: function js_com_cs_v2_UI_Accordion_Accordion$get__mouseOverUL() {
        /// <value type="Boolean"></value>
        return this._mouseOverUL_private;
    },
    set__mouseOverUL: function js_com_cs_v2_UI_Accordion_Accordion$set__mouseOverUL(value) {
        /// <value type="Boolean"></value>
        this._mouseOverUL_private = value;
        return value;
    },
    
    _allowMultiple: false,
    _openedElements: null,
    
    _init: function js_com_cs_v2_UI_Accordion_Accordion$_init() {
        this._setLIChildren();
        this._hideChildrenULs();
        this._initAttach();
    },
    
    _setLIChildren: function js_com_cs_v2_UI_Accordion_Accordion$_setLIChildren() {
        this._liChildren = js.com.JQueryScriptSharp.jQueryUtil.select('li.level-0', this._mainUL);
    },
    
    _hideChildrenULs: function js_com_cs_v2_UI_Accordion_Accordion$_hideChildrenULs() {
        this._openIfContainsCheckedItems = true;
        var childrenUL = js.com.JQueryScriptSharp.jQueryUtil.select('ul', this._liChildren);
        if (!this._openIfContainsCheckedItems) {
            childrenUL.css('display', 'none');
        }
        else {
            var currUL;
            for (var i = 0; i < childrenUL.length; i++) {
                var checkedElems = js.com.JQueryScriptSharp.jQueryUtil.select('input:checked', childrenUL.eq(i));
                currUL = childrenUL.eq(i);
                if (checkedElems.length > 0) {
                    childrenUL.eq(i).slideDown(0);
                    childrenUL.eq(i).css('display', 'block');
                    var parentLI = childrenUL.eq(i).closest('li').eq(0);
                    parentLI.addClass('opened').removeClass('closed');
                    childrenUL.eq(i).css('display', 'block');
                }
                else {
                    currUL.css('display', 'none');
                }
            }
        }
    },
    
    _initAttach: function js_com_cs_v2_UI_Accordion_Accordion$_initAttach() {
        this._attachChildrenLI();
        this._attachMouseOverUL();
    },
    
    _attachMouseOverUL: function js_com_cs_v2_UI_Accordion_Accordion$_attachMouseOverUL() {
        var ulChildren = js.com.JQueryScriptSharp.jQueryUtil.select('ul.super-ul li.level-0 ul');
        ulChildren.mouseover(Delegate.create(this, this._mouseOverUL));
        ulChildren.mouseout(Delegate.create(this, this._mouseOutUL));
    },
    
    _mouseOverUL: function js_com_cs_v2_UI_Accordion_Accordion$_mouseOverUL(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.set__mouseOverUL(true);
    },
    
    _mouseOutUL: function js_com_cs_v2_UI_Accordion_Accordion$_mouseOutUL(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.set__mouseOverUL(false);
    },
    
    _attachChildrenLI: function js_com_cs_v2_UI_Accordion_Accordion$_attachChildrenLI() {
        for (var i = 0; i < this._liChildren.length; i++) {
            this._liChildren.eq(i).click(Delegate.create(this, this._elem_onClick));
        }
    },
    
    _elem_onClick: function js_com_cs_v2_UI_Accordion_Accordion$_elem_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var item = (e.currentTarget);
        var elem = new js.com.cs.v2.Controls.Common.MyDOMElement(item);
        if (!this.get__mouseOverUL()) {
            var firstUL = js.com.JQueryScriptSharp.jQueryUtil.select('ul', item).eq(0);
            this._currUL = firstUL;
            if (!this._allowMultiple) {
                if (elem.get_jQueryElement().hasClass('opened')) {
                    firstUL.slideUp(this._slideDuration);
                    elem.get_jQueryElement().addClass('closed').removeClass('opened');
                    return;
                }
                var openedElements = js.com.JQueryScriptSharp.jQueryUtil.select('li.opened ul');
                openedElements.css('display', 'none');
                var parentLI = openedElements.closest('li').eq(0);
                parentLI.removeClass('opened').addClass('closed');
            }
            if (firstUL.css('display') === 'block') {
                firstUL.slideUp(this._slideDuration);
                elem.get_jQueryElement().addClass('closed').removeClass('opened');
            }
            else {
                firstUL.slideDown(this._slideDuration);
                firstUL.css('display', 'block');
                this._openedElements.add(firstUL);
                elem.get_jQueryElement().addClass('opened').removeClass('closed');
            }
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Accordion.AccordionDetails

js.com.cs.v2.UI.Accordion.AccordionDetails = function js_com_cs_v2_UI_Accordion_AccordionDetails() {
    /// <field name="ulElement" type="jQuery">
    /// </field>
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
    /// <field name="allowMultipleOpen" type="Boolean">
    /// </field>
    /// <field name="openIfContainsCheckedItems" type="Boolean">
    /// </field>
}
js.com.cs.v2.UI.Accordion.AccordionDetails.prototype = {
    ulElement: null,
    slideDuration: 0,
    allowMultipleOpen: false,
    openIfContainsCheckedItems: false
}


Type.createNamespace('js.com.cs.v2.UI');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.AJAXLoader

js.com.cs.v2.UI.AJAXLoader = function js_com_cs_v2_UI_AJAXLoader(cssClassName_Prepend, imgLoadingSrc) {
    /// <param name="cssClassName_Prepend" type="String">
    /// The CSS class name to prepend the classes set
    /// </param>
    /// <param name="imgLoadingSrc" type="String">
    /// </param>
    /// <field name="imageLoadingSrc" type="String">
    /// Image to show once loading
    /// </field>
    /// <field name="loadingText" type="String">
    /// Text to show when loading
    /// </field>
    /// <field name="imageSrc" type="String">
    /// Image to show when loaded
    /// </field>
    /// <field name="text" type="String">
    /// Text to show when not loading
    /// </field>
    /// <field name="_tdText$2" type="js.com.cs.v2.Controls.Common.MyTableCellElement">
    /// </field>
    /// <field name="_img$2" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_valueChecker_imgSrc_Yes$2" type="String">
    /// </field>
    /// <field name="_valueChecker_imgSrc_No$2" type="String">
    /// </field>
    /// <field name="_valueChecker_Text_Yes$2" type="String">
    /// </field>
    /// <field name="_valueChecker_Text_No$2" type="String">
    /// </field>
    js.com.cs.v2.UI.AJAXLoader.constructBase(this);
    this.addClass(cssClassName_Prepend + 'tbLoading');
    this.imageLoadingSrc = imgLoadingSrc;
    this._initControls$2(cssClassName_Prepend);
}
js.com.cs.v2.UI.AJAXLoader.prototype = {
    imageLoadingSrc: null,
    loadingText: 'Loading ...',
    imageSrc: null,
    text: null,
    _tdText$2: null,
    _img$2: null,
    
    _initControls$2: function js_com_cs_v2_UI_AJAXLoader$_initControls$2(cssClassName_Prepend) {
        /// <param name="cssClassName_Prepend" type="String">
        /// </param>
        var tr = this.insertRow();
        var td = tr.insertCell();
        td.addClass(cssClassName_Prepend + 'tdLoadingImg');
        this._img$2 = new js.com.cs.v2.Controls.Common.MyImageElement();
        td.appendChild(this._img$2);
        this._img$2.addClass(cssClassName_Prepend + 'imgLoading');
        this._tdText$2 = tr.insertCell();
        this._tdText$2.addClass(cssClassName_Prepend + 'tdLoadingText');
        this._img$2.set_src(this.imageLoadingSrc);
    },
    
    attachToControl: function js_com_cs_v2_UI_AJAXLoader$attachToControl(domElem) {
        /// <param name="domElem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        var ctrlPos = new js.com.cs.v2.UI.CtrlPositioner();
        ctrlPos.positionControl(domElem, this);
    },
    
    attachToValueChecker: function js_com_cs_v2_UI_AJAXLoader$attachToValueChecker(valueChecker, imageSrc_Yes, Text_Yes, imageSrc_No, Text_No) {
        /// <param name="valueChecker" type="js.com.cs.v2.Classes.Validation.ValueChecker">
        /// </param>
        /// <param name="imageSrc_Yes" type="String">
        /// </param>
        /// <param name="Text_Yes" type="String">
        /// </param>
        /// <param name="imageSrc_No" type="String">
        /// </param>
        /// <param name="Text_No" type="String">
        /// </param>
        this._valueChecker_imgSrc_No$2 = imageSrc_No;
        this._valueChecker_imgSrc_Yes$2 = imageSrc_Yes;
        this._valueChecker_Text_Yes$2 = Text_Yes;
        this._valueChecker_Text_No$2 = Text_No;
        valueChecker.add_onChangedStatus(Delegate.create(this, this._valueChecker_OnChangedStatus$2));
    },
    
    _valueChecker_imgSrc_Yes$2: null,
    _valueChecker_imgSrc_No$2: null,
    _valueChecker_Text_Yes$2: null,
    _valueChecker_Text_No$2: null,
    
    _valueChecker_OnChangedStatus$2: function js_com_cs_v2_UI_AJAXLoader$_valueChecker_OnChangedStatus$2(sender, status) {
        /// <param name="sender" type="js.com.cs.v2.Classes.Validation.ValueChecker">
        /// </param>
        /// <param name="status" type="js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS">
        /// </param>
        if (!String.isNullOrEmpty(sender.formElement.get_value())) {
            this.get_style().display = '';
            switch (status) {
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.hidden:
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.loading:
                    this._img$2.set_src(this.imageLoadingSrc);
                    this._tdText$2.set_innerText(this.loadingText);
                    break;
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.yes:
                    this._img$2.set_src(this._valueChecker_imgSrc_Yes$2);
                    this._tdText$2.set_innerText(this._valueChecker_Text_Yes$2);
                    break;
                case js.com.cs.v2.Classes.Validation.VALUECHECKER_STATUS.no:
                    this._img$2.set_src(this._valueChecker_imgSrc_No$2);
                    this._tdText$2.set_innerText(this._valueChecker_Text_No$2);
                    break;
            }
        }
        else {
            this.get_style().display = 'none';
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.CtrlPositioner

js.com.cs.v2.UI.CtrlPositioner = function js_com_cs_v2_UI_CtrlPositioner() {
    /// <field name="ctrlToPositionWith" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="ctrl" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="divElem" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="alignPosition" type="js.com.cs.v2.Enums.POSITION">
    /// </field>
    /// <field name="marginTop" type="Number" integer="true">
    /// </field>
    /// <field name="marginLeft" type="Number" integer="true">
    /// </field>
    this.alignPosition = js.com.cs.v2.Enums.POSITION.right;
}
js.com.cs.v2.UI.CtrlPositioner.prototype = {
    ctrlToPositionWith: null,
    ctrl: null,
    divElem: null,
    marginTop: 5,
    marginLeft: 5,
    
    _getWidth: function js_com_cs_v2_UI_CtrlPositioner$_getWidth() {
        /// <returns type="Number" integer="true"></returns>
        var isVisible = this.ctrlToPositionWith.isVisible(true);
        var width = this.ctrlToPositionWith.get_jQueryElement().outerWidth();
        if (!isVisible) {
            var domInvisibles = [];
            var domParent = this.ctrlToPositionWith.get_parent();
            while (domParent != null && domParent.get_domElement() !== js.com.cs.v2.Util.DOMUtil.get_body().get_domElement()) {
                if (!domParent.isVisible()) {
                    domInvisibles[domInvisibles.length] = domParent;
                }
                var id = domParent.get_id();
                domParent = domParent.get_parent();
            }
            for (var i = 0; i < domInvisibles.length; i++) {
                domInvisibles[i].get_jQueryElement().css('display', '');
            }
            width = this.ctrlToPositionWith.get_jQueryElement().outerWidth();
            for (var i = 0; i < domInvisibles.length; i++) {
                domInvisibles[i].get_jQueryElement().css('display', 'none');
            }
        }
        return width;
    },
    
    _setPosition: function js_com_cs_v2_UI_CtrlPositioner$_setPosition() {
        var left = 0, top = 0;
        switch (this.alignPosition) {
            case js.com.cs.v2.Enums.POSITION.topLeft:
            case js.com.cs.v2.Enums.POSITION.topRight:
            case js.com.cs.v2.Enums.POSITION.top:
                left = 0;
                top = 0 - this.ctrl.getOuterHeight(true) - this.marginTop;
                break;
            case js.com.cs.v2.Enums.POSITION.left:
                left = 0 - this.ctrl.getOuterWidth(true) - this.marginLeft;
                top = 0;
                break;
            case js.com.cs.v2.Enums.POSITION.center:
            case js.com.cs.v2.Enums.POSITION.right:
                left = this.ctrlToPositionWith.getOuterWidth(true) + this.marginLeft;
                top = 0;
                break;
            case js.com.cs.v2.Enums.POSITION.bottomLeft:
            case js.com.cs.v2.Enums.POSITION.bottomRight:
            case js.com.cs.v2.Enums.POSITION.bottom:
                left = 0;
                top = this.ctrlToPositionWith.getOuterHeight(true) + this.marginTop;
                break;
        }
        this.ctrl.get_style().left = left + 'px';
        this.ctrl.get_style().top = top + 'px';
    },
    
    _addControl: function js_com_cs_v2_UI_CtrlPositioner$_addControl() {
        this.divElem = new js.com.cs.v2.Controls.Common.MyDivElement();
        this.ctrlToPositionWith.get_jQueryElement().after(this.divElem.get_domElement());
        this.ctrlToPositionWith.get_parent().removeChild(this.ctrlToPositionWith);
        this.divElem.appendChild(this.ctrlToPositionWith);
        this.divElem.get_style().position = 'relative';
        this.ctrl.get_style().position = 'absolute';
        this.divElem.appendChild(this.ctrl);
    },
    
    positionControl: function js_com_cs_v2_UI_CtrlPositioner$positionControl(ctrlToPositionWith, ctrl) {
        /// <param name="ctrlToPositionWith" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        /// <param name="ctrl" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        this.ctrlToPositionWith = ctrlToPositionWith;
        this.ctrl = ctrl;
        this._addControl();
        this._setPosition();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Image

js.com.cs.v2.UI.Image = function js_com_cs_v2_UI_Image(element) {
    /// <param name="element" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </param>
    /// <field name="ImageNormal" type="String">
    /// </field>
    /// <field name="ImageRollover" type="String">
    /// </field>
    /// <field name="_onClick_ClickButton" type="js.com.cs.v2.Controls.Form.MyButton">
    /// </field>
    /// <field name="_preloadImg" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_image" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    if (Type.canCast(element, js.com.cs.v2.Controls.Common.MyImageElement)) {
        this._image = element;
    }
    else {
        this._image = new js.com.cs.v2.Controls.Common.MyImageElement(element);
    }
    this.ImageNormal = this._image.get_src();
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._onLoad));
}
js.com.cs.v2.UI.Image.prototype = {
    ImageNormal: null,
    ImageRollover: null,
    _onClick_ClickButton: null,
    _preloadImg: null,
    _image: null,
    
    SetOnClick_ClickButton: function js_com_cs_v2_UI_Image$SetOnClick_ClickButton(id) {
        /// <param name="id" type="js.com.cs.v2.Controls.Form.MyButton">
        /// </param>
        var btn = new js.com.cs.v2.Controls.Form.MyButton();
        if (Type.canCast(id, String)) {
            var elem = js.com.JQueryScriptSharp.jQueryUtil.selectById(id).get(0);
            if (elem != null) {
                this._onClick_ClickButton = new js.com.cs.v2.Controls.Form.MyButton(elem);
            }
        }
        else {
            this._onClick_ClickButton = id;
        }
    },
    
    _imageClick: function js_com_cs_v2_UI_Image$_imageClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._onClick_ClickButton != null) {
            this._onClick_ClickButton.focus();
            this._onClick_ClickButton.performClick();
        }
    },
    
    _imageMouseOver: function js_com_cs_v2_UI_Image$_imageMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (!String.isNullOrEmpty(this.ImageRollover)) {
            this._image.set_src(this.ImageRollover);
        }
    },
    
    _imageMouseOut: function js_com_cs_v2_UI_Image$_imageMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (!String.isNullOrEmpty(this.ImageNormal)) {
            this._image.set_src(this.ImageNormal);
        }
    },
    
    _imageRolloverPreloaded: function js_com_cs_v2_UI_Image$_imageRolloverPreloaded(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._preloadImg = null;
    },
    
    _startPreloadingImage: function js_com_cs_v2_UI_Image$_startPreloadingImage() {
        if (this._preloadImg == null) {
            this._preloadImg = new js.com.cs.v2.Controls.Common.MyImageElement();
            this._preloadImg.add_onLoad(Delegate.create(this, this._imageRolloverPreloaded));
        }
        this._preloadImg.set_src(this.ImageRollover);
    },
    
    _onLoad: function js_com_cs_v2_UI_Image$_onLoad() {
        if (!isNullOrUndefined(this.ImageRollover)) {
            this._startPreloadingImage();
        }
        if (this._image != null) {
            this._image.add_onClick(Delegate.create(this, this._imageClick));
            this._image.add_onMouseOver(Delegate.create(this, this._imageMouseOver));
            this._image.add_onMouseOut(Delegate.create(this, this._imageMouseOut));
        }
    },
    
    changeImage: function js_com_cs_v2_UI_Image$changeImage(imgNormal, imgRollover) {
        /// <param name="imgNormal" type="String">
        /// </param>
        /// <param name="imgRollover" type="String">
        /// </param>
        this.ImageNormal = imgNormal;
        this.ImageRollover = imgRollover;
        this._startPreloadingImage();
        this._image.set_src(this.ImageNormal);
    }
}


Type.createNamespace('js.com.cs.v2.UI.ExpandableTree');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.ExpandableTree.ExpandableTree

js.com.cs.v2.UI.ExpandableTree.ExpandableTree = function js_com_cs_v2_UI_ExpandableTree_ExpandableTree(rootLevelNode, settings, allowMultipleOpen, initOnReadyCallback) {
    /// <param name="rootLevelNode" type="Object" domElement="true">
    /// The root node of the menu.
    /// </param>
    /// <param name="settings" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings">
    /// </param>
    /// <param name="allowMultipleOpen" type="Boolean">
    /// </param>
    /// <param name="initOnReadyCallback" type="Boolean">
    /// </param>
    /// <field name="_clickedLevel" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
    /// </field>
    /// <field name="_rootLevel" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
    /// </field>
    /// <field name="_rootLevelNode" type="Object" domElement="true">
    /// </field>
    /// <field name="_allowMultipleOpen" type="Boolean">
    /// </field>
    /// <field name="_settings" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings">
    /// </field>
    if (settings == null) {
        settings = new js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings();
    }
    this._settings = settings;
    this._allowMultipleOpen = allowMultipleOpen;
    this._rootLevelNode = rootLevelNode;
    if (initOnReadyCallback) {
        js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
    }
    else {
        this._init();
    }
}
js.com.cs.v2.UI.ExpandableTree.ExpandableTree.prototype = {
    _clickedLevel: null,
    _rootLevel: null,
    _rootLevelNode: null,
    _allowMultipleOpen: false,
    _settings: null,
    
    _init: function js_com_cs_v2_UI_ExpandableTree_ExpandableTree$_init() {
        this._rootLevel = new js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel(new js.com.cs.v2.Controls.Common.MyDOMElement(this._rootLevelNode), null, this._settings);
        this._rootLevel.add_onClick(Delegate.create(this, this._rootLevel_OnClick));
    },
    
    _rootLevel_OnClick: function js_com_cs_v2_UI_ExpandableTree_ExpandableTree$_rootLevel_OnClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var levelClicked = e.data;
        if (levelClicked === this._clickedLevel) {
            this._clickedLevel.toggle();
            if (!this._clickedLevel.get_isOpened()) {
                this._clickedLevel = null;
            }
        }
        else {
            if (!this._allowMultipleOpen && this._clickedLevel != null) {
                if (!levelClicked.hasParent(this._clickedLevel)) {
                    this._clickedLevel.closeUpTillSiblingLevel(levelClicked);
                }
            }
            this._clickedLevel = levelClicked;
            levelClicked.toggle();
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel

js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel = function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel(levelElement, parentLevel, settings) {
    /// <param name="levelElement" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// This is usually the [li] element which will inside it contain an [a] tag and if it contains children, it will contain a [ul] and child [li]s.  If it is the root node then usually it is the parent of the [ul]
    /// </param>
    /// <param name="parentLevel" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
    /// </param>
    /// <param name="settings" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings">
    /// </param>
    /// <field name="__onClick" type="js.com.JQueryScriptSharp.EventCallback">
    /// </field>
    /// <field name="_childLevels" type="Array" elementType="ExpandableTreeLevel">
    /// </field>
    /// <field name="_aLink" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_levelElement" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_ulChildLevels" type="js.com.cs.v2.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="_href" type="String">
    /// </field>
    /// <field name="_open" type="Boolean">
    /// </field>
    /// <field name="_settings" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
    /// </field>
    /// <field name="_initialText" type="String">
    /// </field>
    this._childLevels = [];
    this._levelElement = levelElement;
    this._parent = parentLevel;
    this._settings = settings;
    this._init();
}
js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel.prototype = {
    
    add_onClick: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$add_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick = Delegate.combine(this.__onClick, value);
    },
    remove_onClick: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick = Delegate.remove(this.__onClick, value);
    },
    
    __onClick: null,
    
    get_isSelected: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$get_isSelected() {
        /// <value type="Boolean"></value>
        if (this._aLink != null) {
            return this._aLink.get_jQueryElement().hasClass(this._settings.selectedClass);
        }
        return false;
    },
    
    get_childLevels: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$get_childLevels() {
        /// <value type="Array" elementType="ExpandableTreeLevel"></value>
        return this._childLevels;
    },
    
    _aLink: null,
    _levelElement: null,
    _ulChildLevels: null,
    _href: null,
    _open: false,
    _settings: null,
    _parent: null,
    _initialText: null,
    
    get_parent: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$get_parent() {
        /// <value type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel"></value>
        return this._parent;
    },
    
    _init: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_init() {
        var ulChildLevels = js.com.JQueryScriptSharp.jQueryUtil.select('ul', this._levelElement.get_jQueryElement());
        if (ulChildLevels.length > 0) {
            this._ulChildLevels = new js.com.cs.v2.Controls.Common.MyUnOrderedListElem(ulChildLevels.eq(0));
            this._parseChildLinks();
        }
        var aHref = js.com.JQueryScriptSharp.jQueryUtil.select('a', this._levelElement.get_jQueryElement());
        if (aHref.length > 0) {
            this._aLink = new js.com.cs.v2.Controls.Common.MyAnchorElement(aHref.eq(0));
            this._initialText = this._aLink.get_innerHTML();
            if (this._aLink.get_parent().get_domElement() === this._levelElement.get_domElement()) {
                if (!String.isNullOrEmpty(this._aLink.get_jQueryElement().attr('href'))) {
                    this._href = this._aLink.get_href();
                    if (this._childLevels.length > 0) {
                        this._aLink.get_domElement().attributes.removeNamedItem('href');
                    }
                }
                this._aLink.add_onClick(Delegate.create(this, this._aLink_onClick));
                if (js.com.cs.v2.Util.GeneralUtil.isIE6()) {
                    this._aLink.add_onMouseEnter(Delegate.create(this, this._aLink_onMouseEnter));
                    this._aLink.add_onMouseLeave(Delegate.create(this, this._aLink_onMouseLeave));
                }
            }
            else {
                this._aLink = null;
                this._initialText = this._levelElement.get_innerHTML();
            }
        }
        this._openOrHideInitially();
    },
    
    _updateText: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_updateText(opened) {
        /// <param name="opened" type="Boolean">
        /// </param>
        if (this._childLevels != null && this._childLevels.length > 0) {
            var prependText = (opened) ? this._settings.prependOpenedText : this._settings.prependClosedText;
            var text = (String.isNullOrEmpty(prependText)) ? this._initialText : prependText + this._initialText;
            if (this._aLink != null) {
                this._aLink.set_innerHTML(text);
            }
        }
    },
    
    _openOrHideInitially: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_openOrHideInitially() {
        /// <summary>
        /// CHeck whether item should be opened or hidden initially
        /// </summary>
        if (this.get_parent() != null && this._ulChildLevels != null && !this.get_isSelected() && !this.isChildSelected()) {
            this._ulChildLevels.hide();
        }
        else {
            this._open = true;
        }
        this._updateText(this._open);
    },
    
    _aLink_onMouseLeave: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_aLink_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._aLink.removeClass('over');
    },
    
    _aLink_onMouseEnter: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_aLink_onMouseEnter(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._aLink.addClass('over');
    },
    
    _aLink_onClick: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_aLink_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._open && this._settings.linksWithChildrenClickable && !String.isNullOrEmpty(this._href)) {
            js.com.cs.v2.Util.WindowUtil.changeLocation(this._href);
        }
        else {
            if (this.__onClick != null) {
                e.data = this;
                this.__onClick.invoke(e);
            }
        }
    },
    
    _parseChildLinks: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_parseChildLinks() {
        for (var i = 0; i < this._ulChildLevels.get_domElement().childNodes.length; i++) {
            var childLevelElement = new js.com.cs.v2.Controls.Common.MyDOMElement(this._ulChildLevels.get_domElement().childNodes[i]);
            var childLevel = new js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel(childLevelElement, this, this._settings);
            childLevel.add_onClick(Delegate.create(this, this._childLevel_OnClick));
            this._childLevels[this._childLevels.length] = childLevel;
        }
    },
    
    _childLevel_OnClick: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$_childLevel_OnClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.__onClick.invoke(e);
    },
    
    get_title: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$get_title() {
        /// <value type="String"></value>
        if (this._aLink != null) {
            return this._aLink.get_innerHTML();
        }
        else {
            return null;
        }
    },
    
    isChildSelected: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$isChildSelected() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this._childLevels.length; i++) {
            if (this._childLevels[i].get_isSelected() || this._childLevels[i].isChildSelected()) {
                return true;
            }
        }
        return false;
    },
    
    hasParent: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$hasParent(level) {
        /// <param name="level" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
        /// </param>
        /// <returns type="Boolean"></returns>
        var parent = this.get_parent();
        while (parent !== level && parent.get_parent() != null) {
            parent = parent.get_parent();
        }
        if (parent === level) {
            return true;
        }
        else {
            return false;
        }
    },
    
    open: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$open() {
        if (!this._open && this._ulChildLevels != null) {
            this._open = true;
            this._ulChildLevels.get_jQueryElement().slideDown(this._settings.animationDurationMS);
            this._updateText(true);
            if (this._aLink != null && !String.isNullOrEmpty(this._settings.cssClassOpened)) {
                this._aLink.addClass(this._settings.cssClassOpened);
            }
        }
    },
    
    close: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$close(closeAllChildren) {
        /// <param name="closeAllChildren" type="Boolean">
        /// </param>
        if (this._open && this._ulChildLevels != null) {
            this._open = false;
            this._ulChildLevels.get_jQueryElement().slideUp(this._settings.animationDurationMS);
            if (closeAllChildren) {
                for (var i = 0; i < this._childLevels.length; i++) {
                    this._childLevels[i].close(closeAllChildren);
                }
            }
            this._updateText(false);
            if (this._aLink != null && !String.isNullOrEmpty(this._settings.cssClassOpened)) {
                this._aLink.removeClass(this._settings.cssClassOpened);
            }
        }
    },
    
    toggle: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$toggle() {
        if (this._open) {
            this.close(true);
        }
        else {
            this.open();
        }
    },
    
    closeUpTillSiblingLevel: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$closeUpTillSiblingLevel(sibling) {
        /// <param name="sibling" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
        /// </param>
        this.close(true);
        if (!this.isSibling(sibling) && this.get_parent() != null) {
            this.get_parent().closeUpTillSiblingLevel(sibling);
        }
    },
    
    isSibling: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$isSibling(level) {
        /// <param name="level" type="js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel">
        /// </param>
        /// <returns type="Boolean"></returns>
        if (this.get_parent() == null) {
            return false;
        }
        else {
            for (var i = 0; i < this.get_parent().get_childLevels().length; i++) {
                if (this.get_parent().get_childLevels()[i] === level) {
                    return true;
                }
            }
            return false;
        }
    },
    
    get_isOpened: function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeLevel$get_isOpened() {
        /// <value type="Boolean"></value>
        return this._open;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings

js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings = function js_com_cs_v2_UI_ExpandableTree_ExpandableTreeSettings(animationDurationMS, linksWithChildrenClickable) {
    /// <param name="animationDurationMS" type="Number" integer="true">
    /// </param>
    /// <param name="linksWithChildrenClickable" type="Boolean">
    /// If false, user can only click on leaf nodes.  If true, when a user clicks again on an open link, it will redirect
    /// </param>
    /// <field name="animationDurationMS" type="Number" integer="true">
    /// </field>
    /// <field name="linksWithChildrenClickable" type="Boolean">
    /// </field>
    /// <field name="prependOpenedText" type="String">
    /// </field>
    /// <field name="prependClosedText" type="String">
    /// </field>
    /// <field name="cssClassOpened" type="String">
    /// </field>
    /// <field name="selectedClass" type="String">
    /// The CSS class attached with the [a] tag which shows that it is selected (so that it will be initially open)
    /// </field>
    if (isNullOrUndefined(animationDurationMS)) {
        animationDurationMS = 250;
    }
    if (isNullOrUndefined(this.linksWithChildrenClickable)) {
        this.linksWithChildrenClickable = true;
    }
    this.animationDurationMS = animationDurationMS;
    this.linksWithChildrenClickable = linksWithChildrenClickable;
    this.selectedClass = 'selected';
}
js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings.prototype = {
    animationDurationMS: 0,
    linksWithChildrenClickable: false,
    prependOpenedText: null,
    prependClosedText: null,
    cssClassOpened: 'open',
    selectedClass: null
}


Type.createNamespace('js.com.cs.v2.UI.FLVPlayer');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer

js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer = function js_com_cs_v2_UI_FLVPlayer_GeneralFLVPlayer() {
    /// <field name="flvplayeR_COUNT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="playeR_URL" type="String">
    /// </field>
    /// <field name="expresS_INSTALL" type="String">
    /// </field>
    /// <field name="div" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divVideo" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    this.div = new js.com.cs.v2.Controls.Common.MyDivElement();
}
js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer.prototype = {
    playeR_URL: '/includes/com/flash/flv/player.swf',
    expresS_INSTALL: '/includes/com/flash/swfobject/expressInstall.swf',
    div: null,
    _divVideo: null,
    
    _removeCurrentDiv: function js_com_cs_v2_UI_FLVPlayer_GeneralFLVPlayer$_removeCurrentDiv() {
        if (this._divVideo != null) {
            this.div.removeChild(this._divVideo);
        }
    },
    
    _createDiv: function js_com_cs_v2_UI_FLVPlayer_GeneralFLVPlayer$_createDiv(width, height) {
        /// <param name="width" type="String">
        /// </param>
        /// <param name="height" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyDivElement"></returns>
        this._removeCurrentDiv();
        this._divVideo = new js.com.cs.v2.Controls.Common.MyDivElement();
        this.div.appendChild(this._divVideo);
        if (width.indexOf('%') === -1) {
            width = Number.parse(width) + 'px';
        }
        if (height.indexOf('%') === -1) {
            height = Number.parse(height) + 'px';
        }
        this.div.get_style().width = this._divVideo.get_style().width = width;
        this.div.get_style().height = this._divVideo.get_style().height = height;
        this._divVideo.set_id('FLV_PLAYER_' + js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer.flvplayeR_COUNT);
        js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer.flvplayeR_COUNT++;
        return this._divVideo;
    },
    
    _playVideo: function js_com_cs_v2_UI_FLVPlayer_GeneralFLVPlayer$_playVideo(flvURL, width, height) {
        /// <param name="flvURL" type="String">
        /// </param>
        /// <param name="width" type="String">
        /// </param>
        /// <param name="height" type="String">
        /// </param>
        if (width == null) {
            width = '100%';
        }
        if (height == null) {
            height = '100%';
        }
        var div = this._createDiv(width, height);
        var flashVars = { file: flvURL };
        var parameters = { bgcolor: '#000000', allowFullScreen: 'true', allowscriptaccess: 'always' };
        var attributes = { id: div.get_id(), name: div.get_id() };
        if (swfobject == null) {
            alert('Please include SWF Object to play FLVs');
        }
        swfobject.embedSWF(this.playeR_URL, div.get_id(), width, height, '9.0.0', this.expresS_INSTALL, flashVars, parameters, attributes);
    },
    
    _init: function js_com_cs_v2_UI_FLVPlayer_GeneralFLVPlayer$_init() {
    },
    
    play: function js_com_cs_v2_UI_FLVPlayer_GeneralFLVPlayer$play(flvUrl, width, height) {
        /// <param name="flvUrl" type="String">
        /// </param>
        /// <param name="width" type="String">
        /// </param>
        /// <param name="height" type="String">
        /// </param>
        this._playVideo(flvUrl, width, height);
    }
}


Type.createNamespace('js.com.cs.v2.UI.FLVPlayer.JWPlayer');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject

js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject = function js_com_cs_v2_UI_FLVPlayer_JWPlayer_JWPlayerObject(elementID, videoFileURL, width, height, autoStart, jwPlayerPath, flashVersion, expressInstall) {
    /// <param name="elementID" type="String">
    /// </param>
    /// <param name="videoFileURL" type="String">
    /// </param>
    /// <param name="width" type="String">
    /// </param>
    /// <param name="height" type="String">
    /// </param>
    /// <param name="autoStart" type="Boolean">
    /// </param>
    /// <param name="jwPlayerPath" type="String">
    /// </param>
    /// <param name="flashVersion" type="String">
    /// </param>
    /// <param name="expressInstall" type="String">
    /// </param>
    /// <field name="parameters" type="js.com.cs.v2.Util._SwfObjectParams">
    /// </field>
    /// <field name="jW_PLAYER_PATH" type="String" static="true">
    /// </field>
    /// <field name="expresS_INSTALL_PATH" type="String" static="true">
    /// </field>
    /// <field name="flasH_VERSION" type="String" static="true">
    /// </field>
    /// <field name="div" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    this.div = new js.com.cs.v2.Controls.Common.MyDivElement();
    this.div.set_id(elementID);
    this.div.get_style().width = '100%';
    this.div.get_style().height = '100%';
    this.parameters = new js.com.cs.v2.Util._SwfObjectParams();
    if (String.isNullOrEmpty(width)) {
        width = '100%';
    }
    if (String.isNullOrEmpty(height)) {
        height = '100%';
    }
    if (isNullOrUndefined(jwPlayerPath)) {
        jwPlayerPath = js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.jW_PLAYER_PATH;
    }
    if (isNullOrUndefined(expressInstall)) {
        expressInstall = js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.expresS_INSTALL_PATH;
    }
    if (isNullOrUndefined(flashVersion)) {
        flashVersion = js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.flasH_VERSION;
    }
    this.set_autoStart(autoStart);
    this.parameters.expressInstallURL = expressInstall;
    this.parameters.flashVars['file'] = videoFileURL;
    var divFLV = new js.com.cs.v2.Controls.Common.MyDivElement();
    divFLV.set_id(elementID + '_divFLV');
    this.div.appendChild(divFLV);
    js.com.cs.v2.Util.SWFObjectUtil.initSWF(jwPlayerPath, divFLV.get_id(), flashVersion, width, height, this.parameters, null);
}
js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.prototype = {
    
    get_autoStart: function js_com_cs_v2_UI_FLVPlayer_JWPlayer_JWPlayerObject$get_autoStart() {
        /// <value type="Boolean"></value>
        return this.parameters.flashVars['autostart'];
    },
    set_autoStart: function js_com_cs_v2_UI_FLVPlayer_JWPlayer_JWPlayerObject$set_autoStart(value) {
        /// <value type="Boolean"></value>
        this.parameters.flashVars['autostart'] = value;
        return value;
    },
    
    parameters: null,
    div: null
}


Type.createNamespace('js.com.cs.v2.UI.Forms');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.Button

js.com.cs.v2.UI.Forms.Button = function js_com_cs_v2_UI_Forms_Button(element, validateFormOnClick, validationGroup, defaultButton, confirmMessage, buttonForAjax) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="validateFormOnClick" type="Boolean">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <param name="defaultButton" type="Boolean">
    /// </param>
    /// <param name="confirmMessage" type="String">
    /// </param>
    /// <param name="buttonForAjax" type="Boolean">
    /// </param>
    /// <field name="__validationSuccessful2$1" type="EventHandler">
    /// </field>
    /// <field name="_isMouseOver$1" type="Boolean">
    /// </field>
    /// <field name="myButton" type="js.com.cs.v2.Controls.Form.MyButton">
    /// </field>
    /// <field name="_defaultButton$1" type="Boolean">
    /// </field>
    /// <field name="validateFormOnClick" type="Boolean">
    /// </field>
    /// <field name="submitOnClick" type="Boolean">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="_confirmMessage$1" type="String">
    /// </field>
    /// <field name="_form$1" type="js.com.cs.v2.UI.Forms.Form">
    /// </field>
    /// <field name="_onClickFunction$1" type="DOMEventHandler">
    /// </field>
    /// <field name="submitOnCtrlS" type="Boolean">
    /// </field>
    /// <field name="_buttonForAjax$1" type="Boolean">
    /// </field>
    /// <field name="__preValidation$1" type="js.com.cs.v2.UI.Forms.ValidationHandler">
    /// </field>
    /// <field name="_oldOnClick$1" type="Function">
    /// </field>
    /// <field name="__postValidation$1" type="js.com.cs.v2.UI.Forms.ValidationHandler">
    /// </field>
    /// <field name="_validationAndPostValidationAlreadyPerformed$1" type="Boolean">
    /// </field>
    js.com.cs.v2.UI.Forms.Button.constructBase(this);
    if (Type.canCast(element, String)) {
        element = js.com.JQueryScriptSharp.jQueryUtil.selectByIdOrElements(element).get(0);
    }
    this._buttonForAjax$1 = !isNullOrUndefined(buttonForAjax);
    this.validateFormOnClick = validateFormOnClick;
    this.myButton = new js.com.cs.v2.Controls.Form.MyButton(element);
    if (this.get_id().indexOf('uploadformUploads') !== -1) {
    }
    this.validationGroup = validationGroup;
    this._defaultButton$1 = defaultButton;
    this._confirmMessage$1 = confirmMessage;
    this._resetOldClick$1();
    this._init$1();
}
js.com.cs.v2.UI.Forms.Button.prototype = {
    
    add_validationSuccessful2: function js_com_cs_v2_UI_Forms_Button$add_validationSuccessful2(value) {
        /// <param name="value" type="Function" />
        this.__validationSuccessful2$1 = Delegate.combine(this.__validationSuccessful2$1, value);
    },
    remove_validationSuccessful2: function js_com_cs_v2_UI_Forms_Button$remove_validationSuccessful2(value) {
        /// <param name="value" type="Function" />
        this.__validationSuccessful2$1 = Delegate.remove(this.__validationSuccessful2$1, value);
    },
    
    __validationSuccessful2$1: null,
    _isMouseOver$1: false,
    myButton: null,
    _defaultButton$1: false,
    validateFormOnClick: true,
    submitOnClick: true,
    validationGroup: null,
    _confirmMessage$1: null,
    _form$1: null,
    
    get_form: function js_com_cs_v2_UI_Forms_Button$get_form() {
        /// <value type="js.com.cs.v2.UI.Forms.Form"></value>
        return this._form$1;
    },
    set_form: function js_com_cs_v2_UI_Forms_Button$set_form(value) {
        /// <value type="js.com.cs.v2.UI.Forms.Form"></value>
        if (this.get_id().indexOf('uploadformUploads') !== -1) {
        }
        this._form$1 = value;
        return value;
    },
    
    _onClickFunction$1: null,
    submitOnCtrlS: true,
    
    get_id: function js_com_cs_v2_UI_Forms_Button$get_id() {
        /// <value type="String"></value>
        return this.myButton.get_id();
    },
    
    get_enabled: function js_com_cs_v2_UI_Forms_Button$get_enabled() {
        /// <value type="Boolean"></value>
        return !this.myButton.get_disabled();
    },
    set_enabled: function js_com_cs_v2_UI_Forms_Button$set_enabled(value) {
        /// <value type="Boolean"></value>
        this.myButton.set_disabled(!value);
        this._updateCSS$1();
        return value;
    },
    
    get_disabled: function js_com_cs_v2_UI_Forms_Button$get_disabled() {
        /// <value type="Boolean"></value>
        return !this.get_enabled();
    },
    set_disabled: function js_com_cs_v2_UI_Forms_Button$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.set_enabled(!value);
        return value;
    },
    
    toString: function js_com_cs_v2_UI_Forms_Button$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Button]';
    },
    
    isDefaultButton: function js_com_cs_v2_UI_Forms_Button$isDefaultButton() {
        /// <returns type="Boolean"></returns>
        if (this._defaultButton$1) {
            return this._defaultButton$1;
        }
        else {
            if (this.get_form().getDefaultButton() === this) {
                return true;
            }
        }
        return false;
    },
    
    _resetOldClick$1: function js_com_cs_v2_UI_Forms_Button$_resetOldClick$1() {
        var elem = this.myButton.get_myDomElement().get_domElement();
        var oldClickFunc = elem.onclick;
        if (Type.canCast(oldClickFunc, String)) {
            try {
                var code = oldClickFunc;
                oldClickFunc = new Function(code);
            }
            catch ($e1) {
            }
        }
        this.myButton.get_myDomElement().get_domElement().onclick = null;
        this._oldOnClick$1 = oldClickFunc;
    },
    
    _buttonForAjax$1: false,
    
    get_buttonForAjax: function js_com_cs_v2_UI_Forms_Button$get_buttonForAjax() {
        /// <value type="Boolean"></value>
        return this._buttonForAjax$1;
    },
    set_buttonForAjax: function js_com_cs_v2_UI_Forms_Button$set_buttonForAjax(value) {
        /// <value type="Boolean"></value>
        this._buttonForAjax$1 = value;
        return value;
    },
    
    attachPreValidationHandler: function js_com_cs_v2_UI_Forms_Button$attachPreValidationHandler(preValidationHandler) {
        /// <param name="preValidationHandler" type="Function">
        /// </param>
    },
    
    add_preValidation: function js_com_cs_v2_UI_Forms_Button$add_preValidation(value) {
        /// <param name="value" type="Function" />
        this.__preValidation$1 = Delegate.combine(this.__preValidation$1, value);
    },
    remove_preValidation: function js_com_cs_v2_UI_Forms_Button$remove_preValidation(value) {
        /// <param name="value" type="Function" />
        this.__preValidation$1 = Delegate.remove(this.__preValidation$1, value);
    },
    
    __preValidation$1: null,
    _oldOnClick$1: null,
    
    add_postValidation: function js_com_cs_v2_UI_Forms_Button$add_postValidation(value) {
        /// <param name="value" type="Function" />
        this.__postValidation$1 = Delegate.combine(this.__postValidation$1, value);
    },
    remove_postValidation: function js_com_cs_v2_UI_Forms_Button$remove_postValidation(value) {
        /// <param name="value" type="Function" />
        this.__postValidation$1 = Delegate.remove(this.__postValidation$1, value);
    },
    
    __postValidation$1: null,
    _validationAndPostValidationAlreadyPerformed$1: false,
    
    _btnMouseDown$1: function js_com_cs_v2_UI_Forms_Button$_btnMouseDown$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().currentForm = this.get_form();
    },
    
    _btnFocus$1: function js_com_cs_v2_UI_Forms_Button$_btnFocus$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().currentForm = this.get_form();
    },
    
    performValidationAndPostValidation2: function js_com_cs_v2_UI_Forms_Button$performValidationAndPostValidation2() {
        /// <returns type="Boolean"></returns>
        if (!this._validationAndPostValidationAlreadyPerformed$1) {
            this._validationAndPostValidationAlreadyPerformed$1 = true;
            var ok = true;
            ok = (js.com.cs.v2.UI.Forms.FormsCollection.get_instance().validateCurrentForm().length === 0);
            if (ok && this.__postValidation$1 != null) {
                ok = this.__postValidation$1.invoke(this);
            }
            if (ok && !isNullOrUndefined(this._confirmMessage$1)) {
                if (!confirm(this._confirmMessage$1)) {
                    return false;
                }
            }
            if (ok && this.__validationSuccessful2$1 != null) {
                this.__validationSuccessful2$1.invoke(this, null);
            }
            return ok;
        }
        return false;
    },
    
    _askConfirmMessage$1: function js_com_cs_v2_UI_Forms_Button$_askConfirmMessage$1() {
        /// <returns type="Boolean"></returns>
        if (!isNullOrUndefined(this._confirmMessage$1)) {
            if (!confirm(this._confirmMessage$1)) {
                return false;
            }
        }
        return true;
    },
    
    _btnClick$1: function js_com_cs_v2_UI_Forms_Button$_btnClick$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.validateFormOnClick) {
            this._validationAndPostValidationAlreadyPerformed$1 = false;
            js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
            js.com.cs.v2.UI.Forms.FormsCollection.get_instance().currentForm = this.get_form();
            this.get_form().currentClickedButton = this;
            var ok = this._askConfirmMessage$1();
            if (ok) {
                if (this.__preValidation$1 != null) {
                    ok = this.__preValidation$1.invoke(this);
                }
            }
            if (ok) {
                var isASPNetButton = this._oldOnClick$1 != null && this._oldOnClick$1.toString().indexOf('__doPostBack') !== -1;
                if (this._oldOnClick$1 != null) {
                    this._oldOnClick$1.call(this.myButton.get_myDomElement().get_domElement());
                }
                if (!isASPNetButton) {
                    if (this.submitOnClick) {
                        ok = this.get_form().submit(false, false);
                    }
                    else {
                        var errs = this.get_form().validate();
                        ok = errs == null || errs.length === 0;
                    }
                }
            }
            js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
        }
    },
    
    _updateCSS$1: function js_com_cs_v2_UI_Forms_Button$_updateCSS$1() {
        this.myButton.toggleClass(js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON + '-' + js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_OVER, this._isMouseOver$1);
        this.myButton.toggleClass(js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON + '-' + js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_DISABLED, this.get_disabled());
    },
    
    _initHandlers$1: function js_com_cs_v2_UI_Forms_Button$_initHandlers$1() {
        this.myButton.addClass(js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON);
        this._onClickFunction$1 = this.myButton.get_myDomElement().get_domElement().onclick;
        this.myButton.add_onMouseDown(Delegate.create(this, this._btnMouseDown$1));
        this.myButton.add_onFocus(Delegate.create(this, this._btnFocus$1));
        this.myButton.add_onClick(Delegate.create(this, this._btnClick$1));
        this.myButton.add_onMouseEnter(Delegate.create(this, this._myButton_onMouseEnter$1));
        this.myButton.add_onMouseOver(Delegate.create(this, this._myButton_onMouseOver$1));
        this.myButton.add_onMouseOut(Delegate.create(this, this._myButton_onMouseOut$1));
    },
    
    _myButton_onMouseEnter$1: function js_com_cs_v2_UI_Forms_Button$_myButton_onMouseEnter$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
    },
    
    _myButton_onMouseOut$1: function js_com_cs_v2_UI_Forms_Button$_myButton_onMouseOut$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._isMouseOver$1 = false;
        this._updateCSS$1();
    },
    
    _myButton_onMouseOver$1: function js_com_cs_v2_UI_Forms_Button$_myButton_onMouseOver$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._isMouseOver$1 = true;
        this._updateCSS$1();
    },
    
    _initButtonWithForm$1: function js_com_cs_v2_UI_Forms_Button$_initButtonWithForm$1() {
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().addButton(this);
    },
    
    _init$1: function js_com_cs_v2_UI_Forms_Button$_init$1() {
        this._initButtonWithForm$1();
        this._initHandlers$1();
    },
    
    get_defaultButton: function js_com_cs_v2_UI_Forms_Button$get_defaultButton() {
        /// <value type="Boolean"></value>
        return this._defaultButton$1;
    },
    set_defaultButton: function js_com_cs_v2_UI_Forms_Button$set_defaultButton(value) {
        /// <value type="Boolean"></value>
        this._defaultButton$1 = value;
        return value;
    },
    
    destroy: function js_com_cs_v2_UI_Forms_Button$destroy() {
        if (this.myButton != null) {
            this.myButton.destroy();
        }
        js.com.cs.v2.UI.Forms.Button.callBase(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.CheckBoxListRequired

js.com.cs.v2.UI.Forms.CheckBoxListRequired = function js_com_cs_v2_UI_Forms_CheckBoxListRequired(id, hiddenFieldID) {
    /// <param name="id" type="String">
    /// </param>
    /// <param name="hiddenFieldID" type="String">
    /// </param>
    /// <field name="_checkboxListId" type="String">
    /// </field>
    /// <field name="_hiddenField" type="js.com.cs.v2.Controls.Form.MyTextBox">
    /// </field>
    /// <field name="_checkboxes" type="Array" elementType="MyCheckBox">
    /// Array of 'MyCheckBox'
    /// </field>
    this._checkboxes = [];
    this._checkboxListId = new String();
    this._checkboxListId = id;
    this._hiddenField = new js.com.cs.v2.Controls.Form.MyTextBoxHidden(hiddenFieldID);
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.Forms.CheckBoxListRequired.prototype = {
    _checkboxListId: null,
    _hiddenField: null,
    _checkboxes: null,
    
    _chkChange: function js_com_cs_v2_UI_Forms_CheckBoxListRequired$_chkChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var oneSelected = false;
        var oneEnabled = false;
        for (var i = 0; i < this._checkboxes.length; i++) {
            var chk = this._checkboxes[i];
            oneSelected = (oneSelected || chk.get_checked());
            oneEnabled = (oneEnabled || !chk.get_disabled());
        }
        if (oneSelected || !oneEnabled) {
            this._hiddenField.set_text('OK');
        }
        else {
            this._hiddenField.set_text('');
        }
        this._hiddenField.set_disabled(!oneEnabled);
    },
    
    _initCheckBoxes: function js_com_cs_v2_UI_Forms_CheckBoxListRequired$_initCheckBoxes() {
        var i = 0;
        var chk = null;
        var domElem;
        do {
            domElem = document.getElementById(this._checkboxListId + '_' + i);
            if (domElem != null) {
                chk = new js.com.cs.v2.Controls.Form.MyCheckBox(domElem);
                this._checkboxes[this._checkboxes.length] = chk;
                chk.add_onChange(Delegate.create(this, this._chkChange));
                chk.add_onMouseUp(Delegate.create(this, this._chkChange));
                chk.add_onKeyUp(Delegate.create(this, this._chkChange));
                i++;
            }
        } while (domElem != null);
    },
    
    _init: function js_com_cs_v2_UI_Forms_CheckBoxListRequired$_init() {
        this._initCheckBoxes();
        this._chkChange(null);
    },
    
    _update: function js_com_cs_v2_UI_Forms_CheckBoxListRequired$_update() {
        this._chkChange(null);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.DefaultCSSClasses

js.com.cs.v2.UI.Forms.DefaultCSSClasses = function js_com_cs_v2_UI_Forms_DefaultCSSClasses() {
    /// <field name="_Instance" type="js.com.cs.v2.UI.Forms.DefaultCSSClasses" static="true">
    /// </field>
    /// <field name="Instance" type="js.com.cs.v2.UI.Forms.DefaultCSSClasses" static="true">
    /// </field>
    /// <field name="CLASS_READONLY" type="String">
    /// </field>
    /// <field name="CLASS_FOCUS" type="String">
    /// </field>
    /// <field name="CLASS_OVER" type="String">
    /// </field>
    /// <field name="CLASS_ERROR" type="String">
    /// </field>
    /// <field name="CLASS_DISABLED" type="String">
    /// </field>
    /// <field name="CLASS_REQUIRED" type="String">
    /// </field>
    /// <field name="CLASS_BUTTON" type="String">
    /// </field>
    /// <field name="NotUsed" type="Boolean">
    /// </field>
}
js.com.cs.v2.UI.Forms.DefaultCSSClasses.prototype = {
    CLASS_READONLY: 'readonly',
    CLASS_FOCUS: 'focus',
    CLASS_OVER: 'over',
    CLASS_ERROR: 'error',
    CLASS_DISABLED: 'disabled',
    CLASS_REQUIRED: 'required',
    CLASS_BUTTON: 'button',
    NotUsed: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.Field

js.com.cs.v2.UI.Forms.Field = function js_com_cs_v2_UI_Forms_Field(element, title, validationParams, validationGroup, customCSSClasses, groupParams) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v2.UI.Forms.DefaultCSSClasses">
    /// </param>
    /// <param name="groupParams" type="js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </param>
    /// <field name="_destroyed" type="Boolean">
    /// </field>
    /// <field name="element" type="js.com.cs.v2.Controls.Form.IMyBaseFormElement">
    /// </field>
    /// <field name="form" type="js.com.cs.v2.UI.Forms.Form">
    /// </field>
    /// <field name="groups" type="Array" elementType="FieldGroup">
    /// </field>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="requiredGroup" type="Object">
    /// </field>
    /// <field name="requiredGroupOne" type="Object">
    /// </field>
    /// <field name="_cssHandler" type="js.com.cs.v2.UI.Forms.FieldCSSHandler">
    /// </field>
    /// <field name="_fieldValidator" type="js.com.cs.v2.UI.Forms.FieldValidator">
    /// </field>
    /// <field name="_inputConstraint" type="js.com.cs.v2.UI.Forms.FieldInputConstraint">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </field>
    /// <field name="_groupParams" type="js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="_hasError" type="Boolean">
    /// </field>
    /// <field name="_hasFocus" type="Boolean">
    /// </field>
    /// <field name="__onFocusChanged" type="DOMEventHandler">
    /// </field>
    this.groups = [];
    var elementID = null;
    if (Type.canCast(element, String)) {
        elementID = element;
        element = document.getElementById(elementID);
    }
    if (element == null) {
        js.com.cs.v2.Util.Console.log('js.com.cs.v2.UI.Forms.Field::  Element \'' + elementID + '\' does not exist');
    }
    else {
        if (validationParams == null) {
            validationParams = {};
        }
        if (groupParams == null) {
            groupParams = new js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS();
        }
        this._validationParams = validationParams;
        this.validationGroup = validationGroup;
        this.title = title;
        this.element = js.com.cs.v2.Controls.Form.MyBaseFormElement.getFormElement(element);
        this._cssHandler = new js.com.cs.v2.UI.Forms.FieldCSSHandler(this, customCSSClasses);
        this._groupParams = groupParams;
        this._init();
    }
}
js.com.cs.v2.UI.Forms.Field.prototype = {
    _destroyed: false,
    element: null,
    form: null,
    title: null,
    requiredGroup: null,
    requiredGroupOne: null,
    _cssHandler: null,
    _fieldValidator: null,
    _inputConstraint: null,
    _validationParams: null,
    
    get_validationParams: function js_com_cs_v2_UI_Forms_Field$get_validationParams() {
        /// <value type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS"></value>
        return this._validationParams;
    },
    set_validationParams: function js_com_cs_v2_UI_Forms_Field$set_validationParams(value) {
        /// <value type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS"></value>
        this._validationParams = value;
        return value;
    },
    
    _groupParams: null,
    validationGroup: null,
    
    get_disabled: function js_com_cs_v2_UI_Forms_Field$get_disabled() {
        /// <value type="Boolean"></value>
        return this.element.get_disabled();
    },
    set_disabled: function js_com_cs_v2_UI_Forms_Field$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.element.set_disabled(value);
        if (!value) {
            this.set_hasFocus(false);
        }
        this._cssHandler.update();
        return value;
    },
    
    get_required: function js_com_cs_v2_UI_Forms_Field$get_required() {
        /// <value type="Boolean"></value>
        return this._validationParams.isRequired;
    },
    set_required: function js_com_cs_v2_UI_Forms_Field$set_required(value) {
        /// <value type="Boolean"></value>
        this._validationParams.isRequired = value;
        this._cssHandler.update();
        return value;
    },
    
    _hasError: false,
    
    get_hasError: function js_com_cs_v2_UI_Forms_Field$get_hasError() {
        /// <value type="Boolean"></value>
        return this._hasError;
    },
    set_hasError: function js_com_cs_v2_UI_Forms_Field$set_hasError(value) {
        /// <value type="Boolean"></value>
        this._hasError = value;
        this._cssHandler.update();
        return value;
    },
    
    get_readOnly: function js_com_cs_v2_UI_Forms_Field$get_readOnly() {
        /// <value type="Boolean"></value>
        return this.element.get_myDomElement().get_readOnly();
    },
    set_readOnly: function js_com_cs_v2_UI_Forms_Field$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this.element.get_myDomElement().set_readOnly(value);
        this._cssHandler.update();
        return value;
    },
    
    get_valueObject: function js_com_cs_v2_UI_Forms_Field$get_valueObject() {
        /// <value type="Object"></value>
        return this.element.get_valueObject();
    },
    set_valueObject: function js_com_cs_v2_UI_Forms_Field$set_valueObject(value) {
        /// <value type="Object"></value>
        this.element.set_valueObject(value);
        return value;
    },
    
    isEmpty: function js_com_cs_v2_UI_Forms_Field$isEmpty() {
        /// <returns type="Boolean"></returns>
        var val = this.get_valueObject();
        if (isNullOrUndefined(val) || (Type.canCast(val, String) && (String.isNullOrEmpty(val) || val === this._validationParams.initialEmptyText)) || (Type.canCast(val, Boolean) && !(val))) {
            return true;
        }
        return false;
    },
    
    getWords: function js_com_cs_v2_UI_Forms_Field$getWords() {
        /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
        var val = this.get_valueObject();
        var arr = new js.com.cs.v2.Classes.General.Arrays.MyArray(val.split(' '));
        return arr;
    },
    
    get_id: function js_com_cs_v2_UI_Forms_Field$get_id() {
        /// <value type="String"></value>
        return this.element.get_myDomElement().get_id();
    },
    
    _fieldFocus: function js_com_cs_v2_UI_Forms_Field$_fieldFocus(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.set_hasFocus(true);
        this._cssHandler.update();
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().set_fieldWithFocus(this);
        if (this.get_valueObject() === this._validationParams.initialEmptyText) {
            this.set_valueObject('');
        }
    },
    
    _fieldBlur: function js_com_cs_v2_UI_Forms_Field$_fieldBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.set_hasFocus(false);
        this._cssHandler.update();
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().set_fieldWithFocus(null);
        if (!this._validationParams.doNotValidateOnBlur) {
            this.validate(true);
        }
        if (this.isEmpty() && !String.isNullOrEmpty(this._validationParams.initialEmptyText)) {
            this.set_valueObject(this._validationParams.initialEmptyText);
        }
    },
    
    _initHandlers: function js_com_cs_v2_UI_Forms_Field$_initHandlers() {
        this.element.get_myDomElement().add_onFocus(Delegate.create(this, this._fieldFocus));
        this.element.get_myDomElement().add_onBlur(Delegate.create(this, this._fieldBlur));
    },
    
    _initFieldWithForm: function js_com_cs_v2_UI_Forms_Field$_initFieldWithForm() {
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().addField(this);
    },
    
    _initGroup: function js_com_cs_v2_UI_Forms_Field$_initGroup() {
        if (!isNullOrUndefined(this._groupParams)) {
            var groupID = this._groupParams.groupID;
            if (!isNullOrUndefined(groupID)) {
                var g = js.com.cs.v2.UI.Forms.FormsCollection.get_instance().getGroupByID(groupID);
                if (g != null && !(Type.canCast(g, js.com.cs.v2.UI.Forms.FieldGroup))) {
                    alert('An item with id\'' + groupID + '\' exists while it should be a group not a \'' + g + '\'.  Please change group id.');
                }
                if (!isNullOrUndefined(g)) {
                    g.addFieldToGroup(this);
                }
                else {
                    var tmp = [];
                    tmp[tmp.length] = this.get_id();
                    var newGroup = new js.com.cs.v2.UI.Forms.FieldGroup(tmp, this._groupParams, this.validationGroup, groupID);
                }
            }
        }
    },
    
    _init: function js_com_cs_v2_UI_Forms_Field$_init() {
        this._initFieldWithForm();
        this._initHandlers();
        this._inputConstraint = new js.com.cs.v2.UI.Forms.FieldInputConstraint(this, this._validationParams);
        this._fieldValidator = new js.com.cs.v2.UI.Forms.FieldValidator(this, this._validationParams);
        this._initGroup();
        if (this.isEmpty() && !String.isNullOrEmpty(this._validationParams.initialEmptyText)) {
            this.set_valueObject(this._validationParams.initialEmptyText);
        }
    },
    
    validate: function js_com_cs_v2_UI_Forms_Field$validate(showError) {
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <returns type="String"></returns>
        var errorMsg = null;
        if (!this.element.get_disabled()) {
            errorMsg = this._fieldValidator.validate();
            if (showError && !isNullOrUndefined(errorMsg)) {
                this.set_hasError(true);
            }
            else {
                this.set_hasError(false);
            }
        }
        return errorMsg;
    },
    
    _hasFocus: false,
    
    get_hasFocus: function js_com_cs_v2_UI_Forms_Field$get_hasFocus() {
        /// <value type="Boolean"></value>
        return this._hasFocus;
    },
    set_hasFocus: function js_com_cs_v2_UI_Forms_Field$set_hasFocus(value) {
        /// <value type="Boolean"></value>
        var v = value;
        if (v && this.get_disabled()) {
            v = false;
        }
        this._hasFocus = v;
        if (this.__onFocusChanged != null) {
            this.__onFocusChanged.invoke();
        }
        return value;
    },
    
    add_onFocusChanged: function js_com_cs_v2_UI_Forms_Field$add_onFocusChanged(value) {
        /// <param name="value" type="Function" />
        this.__onFocusChanged = Delegate.combine(this.__onFocusChanged, value);
    },
    remove_onFocusChanged: function js_com_cs_v2_UI_Forms_Field$remove_onFocusChanged(value) {
        /// <param name="value" type="Function" />
        this.__onFocusChanged = Delegate.remove(this.__onFocusChanged, value);
    },
    
    __onFocusChanged: null,
    
    clear: function js_com_cs_v2_UI_Forms_Field$clear() {
        this.set_valueObject('');
    },
    
    toString: function js_com_cs_v2_UI_Forms_Field$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Field - ' + this.get_id() + ']';
    },
    
    updateCss: function js_com_cs_v2_UI_Forms_Field$updateCss() {
        this._cssHandler.update();
    },
    
    destroy: function js_com_cs_v2_UI_Forms_Field$destroy() {
        if (!this._destroyed) {
            this._destroyed = true;
            js.com.cs.v2.UI.Forms.FormsCollection.get_instance().removeField(this);
            this.element.get_myDomElement().remove_onFocus(Delegate.create(this, this._fieldFocus));
            this.element.get_myDomElement().remove_onBlur(Delegate.create(this, this._fieldBlur));
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FieldCSSHandler

js.com.cs.v2.UI.Forms.FieldCSSHandler = function js_com_cs_v2_UI_Forms_FieldCSSHandler(field, customCSSClasses) {
    /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v2.UI.Forms.DefaultCSSClasses">
    /// </param>
    /// <field name="_field" type="js.com.cs.v2.UI.Forms.Field">
    /// </field>
    /// <field name="_cssFocus" type="String">
    /// </field>
    /// <field name="_cssOver" type="String">
    /// </field>
    /// <field name="_cssError" type="String">
    /// </field>
    /// <field name="_cssDisabled" type="String">
    /// </field>
    /// <field name="_cssReadOnly" type="String">
    /// </field>
    /// <field name="_cssRequired" type="String">
    /// </field>
    /// <field name="_lastCssClass" type="String">
    /// </field>
    /// <field name="_isMouseOver" type="Boolean">
    /// </field>
    /// <field name="_initCssClass" type="String">
    /// </field>
    this._initCssClass = field.element.get_myDomElement().get_domElement().className;
    this._field = field;
    if (isNullOrUndefined(customCSSClasses)) {
        customCSSClasses = js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance;
    }
    this._setCSSClasses(customCSSClasses);
    this.init();
}
js.com.cs.v2.UI.Forms.FieldCSSHandler.prototype = {
    _field: null,
    _cssFocus: null,
    _cssOver: null,
    _cssError: null,
    _cssDisabled: null,
    _cssReadOnly: null,
    _cssRequired: null,
    _lastCssClass: null,
    _isMouseOver: false,
    _initCssClass: null,
    
    _mouseOver: function js_com_cs_v2_UI_Forms_FieldCSSHandler$_mouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._isMouseOver = true;
        this.update();
    },
    
    _mouseOut: function js_com_cs_v2_UI_Forms_FieldCSSHandler$_mouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._isMouseOver = false;
        this.update();
    },
    
    _removeAllCSS: function js_com_cs_v2_UI_Forms_FieldCSSHandler$_removeAllCSS() {
        var e = this._field.element.get_myDomElement();
        if (!String.isNullOrEmpty(this._cssFocus)) {
            e.removeClass(this._cssFocus);
        }
        if (!String.isNullOrEmpty(this._cssError)) {
            e.removeClass(this._cssError);
        }
        if (!String.isNullOrEmpty(this._cssDisabled)) {
            e.removeClass(this._cssDisabled);
        }
        if (!String.isNullOrEmpty(this._cssReadOnly)) {
            e.removeClass(this._cssReadOnly);
        }
        if (!String.isNullOrEmpty(this._cssRequired)) {
            e.removeClass(this._cssRequired);
        }
        if (!String.isNullOrEmpty(this._cssOver)) {
            e.removeClass(this._cssOver);
        }
    },
    
    _updateCSS: function js_com_cs_v2_UI_Forms_FieldCSSHandler$_updateCSS(className) {
        /// <param name="className" type="String">
        /// </param>
        if (!String.isNullOrEmpty(className)) {
            this._removeAllCSS();
            this._field.element.get_myDomElement().addClass(this._initCssClass);
            this._field.element.get_myDomElement().addClass(className);
        }
    },
    
    _getCssClass: function js_com_cs_v2_UI_Forms_FieldCSSHandler$_getCssClass(cssClasses) {
        /// <param name="cssClasses" type="Array" elementType="String">
        /// </param>
        /// <returns type="String"></returns>
        var css = '';
        for (var i = 0; i < cssClasses.length; i++) {
            if (String.isNullOrEmpty(cssClasses[i])) {
                continue;
            }
            if (!String.isNullOrEmpty(css)) {
                css += '-';
            }
            css += cssClasses[i];
        }
        return css;
    },
    
    update: function js_com_cs_v2_UI_Forms_FieldCSSHandler$update() {
        this._removeAllCSS();
        if (this._field.element.get_controlType() === js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox || this._field.element.get_controlType() === js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton) {
            return;
        }
        if (js.com.cs.v2.Util.GeneralUtil.isIE() === 0 || js.com.cs.v2.Util.GeneralUtil.isIE() > 6) {
        }
        var cssClass = '';
        if (!String.isNullOrEmpty(this._lastCssClass)) {
            this._field.element.get_myDomElement().removeClass(this._lastCssClass);
        }
        var cssClasses = [];
        cssClasses[cssClasses.length] = 'field';
        cssClasses[cssClasses.length] = (this._field.get_readOnly()) ? this._cssReadOnly : null;
        cssClasses[cssClasses.length] = (this._field.get_required()) ? this._cssRequired : null;
        cssClasses[cssClasses.length] = (this._field.get_hasError()) ? this._cssError : null;
        cssClasses[cssClasses.length] = (this._field.get_hasFocus()) ? this._cssFocus : null;
        cssClasses[cssClasses.length] = (this._isMouseOver) ? this._cssOver : null;
        cssClasses[cssClasses.length] = (this._field.get_disabled()) ? this._cssDisabled : null;
        cssClass = this._getCssClass(cssClasses);
        this._field.element.get_myDomElement().addClass(cssClass);
        this._lastCssClass = cssClass;
    },
    
    init: function js_com_cs_v2_UI_Forms_FieldCSSHandler$init() {
        this._field.element.get_myDomElement().add_onMouseOver(Delegate.create(this, this._mouseOver));
        this._field.element.get_myDomElement().add_onMouseOut(Delegate.create(this, this._mouseOut));
        this.update();
    },
    
    _setCSSClasses: function js_com_cs_v2_UI_Forms_FieldCSSHandler$_setCSSClasses(cssClasses) {
        /// <param name="cssClasses" type="js.com.cs.v2.UI.Forms.DefaultCSSClasses">
        /// </param>
        if (!cssClasses.NotUsed) {
            this._cssOver = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_OVER)) ? cssClasses.CLASS_OVER : ((!js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_OVER : ''));
            this._cssFocus = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_FOCUS)) ? cssClasses.CLASS_FOCUS : ((!js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_FOCUS : ''));
            this._cssError = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_ERROR)) ? cssClasses.CLASS_ERROR : ((!js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_ERROR : ''));
            this._cssDisabled = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_DISABLED)) ? cssClasses.CLASS_DISABLED : ((!js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_DISABLED : ''));
            this._cssReadOnly = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_READONLY)) ? cssClasses.CLASS_READONLY : ((!js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_READONLY : ''));
            this._cssRequired = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_REQUIRED)) ? cssClasses.CLASS_REQUIRED : ((!js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance.CLASS_REQUIRED : ''));
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS

js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS = function js_com_cs_v2_UI_Forms_FIELDGROUP_PARAMETERS() {
    /// <field name="atLeastOneIsRequired" type="Boolean">
    /// </field>
    /// <field name="sameValues" type="Boolean">
    /// </field>
    /// <field name="groupID" type="String">
    /// </field>
}
js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS.prototype = {
    atLeastOneIsRequired: false,
    sameValues: false,
    groupID: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FieldGroup

js.com.cs.v2.UI.Forms.FieldGroup = function js_com_cs_v2_UI_Forms_FieldGroup(fieldIDs, groupParams, validationGroup, groupID) {
    /// <param name="fieldIDs" type="Array" elementType="String">
    /// </param>
    /// <param name="groupParams" type="js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <param name="groupID" type="String">
    /// </param>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="_parameters" type="js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="_groupID" type="String">
    /// </field>
    /// <field name="hasError" type="Boolean">
    /// </field>
    /// <field name="form" type="js.com.cs.v2.UI.Forms.Form">
    /// </field>
    /// <field name="_fieldIDs" type="Array" elementType="String">
    /// </field>
    /// <field name="_fields" type="Array" elementType="Field">
    /// </field>
    this.id = groupID;
    this._parameters = groupParams;
    this._fields = [];
    this._fieldIDs = fieldIDs;
    this.validationGroup = validationGroup;
    this._init();
}
js.com.cs.v2.UI.Forms.FieldGroup.prototype = {
    id: null,
    _parameters: null,
    validationGroup: null,
    _groupID: null,
    hasError: false,
    form: null,
    _fieldIDs: null,
    _fields: null,
    
    _initGroupWithForm: function js_com_cs_v2_UI_Forms_FieldGroup$_initGroupWithForm() {
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().addGroup(this);
    },
    
    _initFields: function js_com_cs_v2_UI_Forms_FieldGroup$_initFields() {
        for (var i = 0; i < this._fieldIDs.length; i++) {
            this.addFieldToGroup(this._fieldIDs[i]);
        }
    },
    
    _init: function js_com_cs_v2_UI_Forms_FieldGroup$_init() {
        this._initFields();
        this._initGroupWithForm();
    },
    
    _hasFieldsGotError: function js_com_cs_v2_UI_Forms_FieldGroup$_hasFieldsGotError() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this._fields.length; i++) {
            if (this._fields[i].get_hasError()) {
                return true;
            }
        }
        return false;
    },
    
    _getFieldsString: function js_com_cs_v2_UI_Forms_FieldGroup$_getFieldsString() {
        /// <returns type="String"></returns>
        var fieldsStr = '';
        for (var i = 0; i < this._fields.length; i++) {
            var f = this._fields[i];
            if (i > 0) {
                if (i === this._fields.length - 1) {
                    fieldsStr += ' & ';
                }
                else {
                    fieldsStr += ', ';
                }
            }
            fieldsStr += f.title;
        }
        return fieldsStr;
    },
    
    _isAtLeastOneFieldFilled: function js_com_cs_v2_UI_Forms_FieldGroup$_isAtLeastOneFieldFilled() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this._fields.length; i++) {
            if (!this._fields[i].isEmpty()) {
                return true;
            }
        }
        return false;
    },
    
    _setAllFieldsError: function js_com_cs_v2_UI_Forms_FieldGroup$_setAllFieldsError(error) {
        /// <param name="error" type="Boolean">
        /// </param>
        for (var i = 0; i < this._fields.length; i++) {
            this._fields[i].set_hasError(error);
        }
    },
    
    _validateAtLeastOneRequired: function js_com_cs_v2_UI_Forms_FieldGroup$_validateAtLeastOneRequired() {
        /// <returns type="js.com.cs.v2.UI.Forms.FormError"></returns>
        if (!this._isAtLeastOneFieldFilled()) {
            this._setAllFieldsError(true);
            return new js.com.cs.v2.UI.Forms.FormError(this, this._getFieldsString() + ' - At least one of the fields must be filled');
        }
        return null;
    },
    
    _validateAllSameValues: function js_com_cs_v2_UI_Forms_FieldGroup$_validateAllSameValues() {
        /// <returns type="js.com.cs.v2.UI.Forms.FormError"></returns>
        var value = null;
        for (var i = 0; i < this._fields.length; i++) {
            var f = this._fields[i];
            if (value == null) {
                value = f.get_valueObject();
            }
            else {
                if (f.get_valueObject() !== value) {
                    this._setAllFieldsError(true);
                    return new js.com.cs.v2.UI.Forms.FormError(this, this._getFieldsString() + ' - Value does not match');
                }
            }
        }
        return null;
    },
    
    validate: function js_com_cs_v2_UI_Forms_FieldGroup$validate(showError, focusOnFirstErrorField, validateEvenIfFieldsAlreadyHaveError) {
        /// <summary>
        /// Validates the group.  Returns a list of errors
        /// </summary>
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <param name="focusOnFirstErrorField" type="Boolean">
        /// </param>
        /// <param name="validateEvenIfFieldsAlreadyHaveError" type="Boolean">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.FormError"></returns>
        var errs = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        var oneFieldFilled = false;
        var areFieldValuesSimilar = true;
        var lastValue = null;
        var allFieldsRequired = (!this._parameters.sameValues && !this._parameters.atLeastOneIsRequired);
        var firstErrorField = null;
        if (!validateEvenIfFieldsAlreadyHaveError) {
            if (this._hasFieldsGotError()) {
                return null;
            }
        }
        var fieldsStr = this._getFieldsString();
        var err = null;
        if (this._parameters.atLeastOneIsRequired) {
            err = this._validateAtLeastOneRequired();
        }
        else if (this._parameters.sameValues) {
            err = this._validateAllSameValues();
        }
        if (err != null && focusOnFirstErrorField && this._fields.length > 0) {
            this._fields[0].element.focus();
            this._fields[0].set_hasFocus(true);
        }
        return err;
    },
    
    validate2: function js_com_cs_v2_UI_Forms_FieldGroup$validate2(showError, focusOnFirstErrorField, validateEvenIfFieldsAlreadyHaveError) {
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <param name="focusOnFirstErrorField" type="Boolean">
        /// </param>
        /// <param name="validateEvenIfFieldsAlreadyHaveError" type="Boolean">
        /// </param>
        /// <returns type="Array" elementType="FormError"></returns>
        var errs = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        var oneFieldFilled = false;
        var areFieldValuesSimilar = true;
        var lastValue = null;
        var allFieldsRequired = (!this._parameters.sameValues && !this._parameters.atLeastOneIsRequired);
        var firstErrorField = null;
        if (!validateEvenIfFieldsAlreadyHaveError) {
            if (this._hasFieldsGotError()) {
                return errs.getBaseArray();
            }
        }
        var fieldsStr = this._getFieldsString();
        var err = null;
        if (focusOnFirstErrorField && firstErrorField != null) {
            firstErrorField.set_hasFocus(true);
        }
        return errs.getBaseArray();
    },
    
    addFieldToGroup: function js_com_cs_v2_UI_Forms_FieldGroup$addFieldToGroup(fieldID) {
        /// <param name="fieldID" type="String">
        /// </param>
        if (!(Type.canCast(fieldID, String))) {
            if (Type.canCast(fieldID, js.com.cs.v2.UI.Forms.Field)) {
                fieldID = (fieldID).get_id();
            }
            else {
                fieldID = (fieldID).id;
            }
        }
        var f = js.com.cs.v2.UI.Forms.FormsCollection.get_instance().getFieldByID(fieldID);
        if (f == null) {
            throw new Error('Field with id \'' + fieldID + '\' not found');
        }
        this._fields[this._fields.length] = f;
        f.groups[f.groups.length] = this;
    },
    
    toString: function js_com_cs_v2_UI_Forms_FieldGroup$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldGroup - ' + this.id + ' (' + this._fields.length + ' fields)]';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FieldInputConstraint

js.com.cs.v2.UI.Forms.FieldInputConstraint = function js_com_cs_v2_UI_Forms_FieldInputConstraint(field, validationParams) {
    /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <field name="_field" type="js.com.cs.v2.UI.Forms.Field">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </field>
    /// <field name="_lastValue" type="String">
    /// </field>
    /// <field name="_regExpUnAllowedChars" type="RegExp">
    /// </field>
    /// <field name="_regExpAllowedPattern" type="RegExp">
    /// </field>
    /// <field name="_maX_INVALID_ATTEMPTS" type="Number" integer="true">
    /// </field>
    /// <field name="_invalidAttempt" type="Number" integer="true">
    /// </field>
    this._validationParams = validationParams;
    this._field = field;
    this._init();
}
js.com.cs.v2.UI.Forms.FieldInputConstraint.prototype = {
    _field: null,
    _validationParams: null,
    _lastValue: null,
    _regExpUnAllowedChars: null,
    _regExpAllowedPattern: null,
    _maX_INVALID_ATTEMPTS: 5,
    _invalidAttempt: 0,
    
    _onBlur: function js_com_cs_v2_UI_Forms_FieldInputConstraint$_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._validationParams.isDate) {
            var value = this._field.get_valueObject();
            value = value.replace(new RegExp('[-.]', 'g'), '/');
            this._field.set_valueObject(value);
        }
    },
    
    _initRegExp: function js_com_cs_v2_UI_Forms_FieldInputConstraint$_initRegExp() {
        var allowedChars = null;
        var allowedPattern = null;
        if (this._validationParams.isEmail) {
            allowedChars = 'a-zA-Z0-9@._%+-';
            allowedPattern = '^[a-zA-Z0-9._%+-]*$';
            allowedPattern += '|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]*$';
        }
        else if (this._validationParams.isNumber) {
            allowedChars = '0-9';
            allowedPattern = '^[-+0-9][0-9.]*$';
            if (!this._validationParams.integersOnly) {
                allowedChars += '.';
            }
            if (!this._validationParams.negativeOnly) {
                allowedChars += '+';
            }
            else {
                allowedPattern = '^[-0-9][0-9.]*';
            }
            if (!this._validationParams.positiveOnly) {
                allowedChars += '-';
            }
            else {
                allowedPattern = '^[+0-9][0-9.]*';
            }
        }
        else if (this._validationParams.isCurrency) {
        }
        else if (this._validationParams.isCreditCardNumber) {
            allowedChars = '0-9';
            allowedPattern = '^[0-9]{0,16}$';
        }
        else if (this._validationParams.isIPAddress) {
            allowedChars = '0-9.';
            allowedPattern = '^[0-9]{0,3}$';
            allowedPattern += '|^[0-9]{0,3}\\.[0-9]{0,3}$';
            allowedPattern += '|^[0-9]{0,3}\\.[0-9]{0,3}\\.[0-9]{0,3}$';
            allowedPattern += '|^[0-9]{0,3}\\.[0-9]{0,3}\\.[0-9]{0,3}\\.[0-9]{0,3}$';
        }
        else if (this._validationParams.isDate) {
            allowedChars = '0-9/ :.amAMPMpm-';
            allowedPattern = '^[0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2} ?(a|m|p|A|M|P|am|pm|AM|PM)?$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2}[:][0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2}[:][0-9]{0,2} ?(a|m|p|A|M|P|am|pm|AM|PM)?$';
        }
        else if (this._validationParams.isAlphaNumeric) {
            allowedChars = 'a-zA-Z0-9_';
        }
        if (!String.isNullOrEmpty(allowedChars)) {
            this._regExpUnAllowedChars = new RegExp('[^' + allowedChars + ']+');
        }
        if (!String.isNullOrEmpty(allowedPattern)) {
            this._regExpAllowedPattern = new RegExp(allowedPattern);
        }
    },
    
    _showUnAllowedCharacters: function js_com_cs_v2_UI_Forms_FieldInputConstraint$_showUnAllowedCharacters(exceedLength, exceedWords) {
        /// <param name="exceedLength" type="Boolean">
        /// </param>
        /// <param name="exceedWords" type="Boolean">
        /// </param>
        var msg = 'The character you are trying to input in this field is not allowed.\r\n\r\n';
        if (this._validationParams.isEmail) {
            msg += 'Please enter a valid email address in this field, e.g. yourname@yourdomain.com.';
        }
        else if (this._validationParams.isNumber) {
            if (this._validationParams.positiveOnly) {
                msg += 'Please enter only valid positive ';
                if (this._validationParams.integersOnly) {
                    msg += 'whole ';
                }
                msg += 'numbers.';
            }
            else {
                if (this._validationParams.negativeOnly) {
                    msg += 'Please enter only valid negative ';
                    if (this._validationParams.integersOnly) {
                        msg += 'whole ';
                    }
                    msg += 'numbers.';
                }
                else {
                    msg += 'Please enter a number.';
                }
            }
        }
        else if (this._validationParams.isDate) {
            msg += 'Please enter a valid date in this field, e.g. 16/04/2008 03:32.';
        }
        else if (this._validationParams.isAlphaNumeric) {
            msg += 'Please enter only alpha numerical characters in this field.';
        }
        else if (this._validationParams.isIPAddress) {
            msg += 'Please enter a valid IP address in this field, e.g. 192.168.2.10';
        }
        else if (this._validationParams.isCreditCardNumber) {
            msg += 'Please enter a valid credit card number, e.g. 4552 7204 1234 5678';
        }
        alert(msg);
    },
    
    _onChange: function js_com_cs_v2_UI_Forms_FieldInputConstraint$_onChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var newValue = this._field.get_valueObject();
        if (!String.isNullOrEmpty(newValue)) {
            var isCharactersUnallowed = false;
            var isPatternAllowed = true;
            if (!isNullOrUndefined(this._regExpUnAllowedChars)) {
                isCharactersUnallowed = this._regExpUnAllowedChars.test(newValue);
            }
            if (!isNullOrUndefined(this._regExpAllowedPattern)) {
                isPatternAllowed = this._regExpAllowedPattern.test(newValue);
            }
            var ok = !isCharactersUnallowed && isPatternAllowed;
            var exceedLength = false;
            var exceedWords = false;
            if (this._validationParams.maxLength > 0) {
                exceedLength = newValue.length > this._validationParams.maxLength;
            }
            if (this._validationParams.maxWords > 0) {
                exceedWords = this._field.getWords().get_length() > this._validationParams.maxWords;
            }
            if (!ok || exceedLength || exceedWords) {
                this._field.set_valueObject(this._lastValue);
                if (!ok) {
                    this._invalidAttempt++;
                    if (this._invalidAttempt === this._maX_INVALID_ATTEMPTS) {
                        this._invalidAttempt = 0;
                        this._showUnAllowedCharacters(exceedLength, exceedWords);
                    }
                }
                else if (exceedLength) {
                    alert('You cannot enter more than ' + this._validationParams.maxLength + ' character' + ((this._validationParams.maxLength === 1) ? '' : 's') + ' in this field.');
                }
                else if (exceedWords) {
                    alert('You cannot enter more than ' + this._validationParams.maxWords + ' word' + ((this._validationParams.maxLength === 1) ? '' : 's') + ' in this field.');
                }
            }
            else {
                this._lastValue = newValue;
            }
        }
    },
    
    _initHandlers: function js_com_cs_v2_UI_Forms_FieldInputConstraint$_initHandlers() {
        if (this._field.element.get_controlType() !== js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox && this._field.element.get_controlType() !== js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton) {
            this._field.element.get_myDomElement().add_onKeyUp(Delegate.create(this, this._onChange));
            this._onChange(null);
            this._field.element.get_myDomElement().add_onBlur(Delegate.create(this, this._onBlur));
            this._onBlur(null);
        }
    },
    
    _init: function js_com_cs_v2_UI_Forms_FieldInputConstraint$_init() {
        this._initRegExp();
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FieldValidator

js.com.cs.v2.UI.Forms.FieldValidator = function js_com_cs_v2_UI_Forms_FieldValidator(field, validationParams) {
    /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <field name="_field" type="js.com.cs.v2.UI.Forms.Field">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS">
    /// </field>
    this._field = field;
    this._validationParams = validationParams;
}
js.com.cs.v2.UI.Forms.FieldValidator.prototype = {
    _field: null,
    _validationParams: null,
    
    validate: function js_com_cs_v2_UI_Forms_FieldValidator$validate() {
        /// <returns type="String"></returns>
        var title = this._field.title;
        if (this._validationParams.isRequired && this._field.isEmpty()) {
            return title + ' is required';
        }
        if (!this._field.isEmpty()) {
            if (this._field.element.get_controlType() !== js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox && this._field.element.get_controlType() !== js.com.cs.v2.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton) {
                var value = this._field.get_valueObject();
                var objErr = new js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG();
                if (this._validationParams.isEmail) {
                    if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isEmail(value)) {
                        return title + ' must be a valid email address';
                    }
                }
                else {
                    if (this._validationParams.isNumber) {
                        if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isNumber(value, this._validationParams, objErr, title)) {
                            return objErr.errorMessage;
                        }
                    }
                    else {
                        if (this._validationParams.isAlphaNumeric) {
                            if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isAlphaNumeric(value)) {
                                return title + ' must contain only alpha numerical characters i.e. letters, digits and underscore (_)';
                            }
                        }
                        else {
                            if (this._validationParams.isDate) {
                                if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isDate(value, this._validationParams, objErr, title)) {
                                    return objErr.errorMessage;
                                }
                            }
                            else {
                                if (this._validationParams.isIPAddress) {
                                    if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isIPAddress(value)) {
                                        return title + ' must be a valid IP address, e.g. 192.168.210.123';
                                    }
                                }
                                else {
                                    if (this._validationParams.isCreditCardNumber) {
                                        if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isCreditCardNumber(value)) {
                                            return title + ' must be a valid credit card number';
                                        }
                                    }
                                    else if (this._validationParams.isWebsite) {
                                        if (!js.com.cs.v2.Classes.Forms.Validation.Validation.isWebsite(value)) {
                                            return title + ' must be a valid website URL';
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (this._validationParams.minLength > 0 || this._validationParams.maxLength > 0 || this._validationParams.maxWords > 0) {
                    if (this._validationParams.minLength > 0 && value.length < this._validationParams.minLength) {
                        return title + ' cannot contain less than ' + this._validationParams.minLength + ' character' + ((this._validationParams.minLength > 1) ? 's' : '');
                    }
                    if (this._validationParams.maxLength > 0 && value.length > this._validationParams.maxLength) {
                        return title + ' cannot contain more than ' + this._validationParams.maxLength + ' character' + ((this._validationParams.maxLength > 1) ? 's' : '');
                    }
                    if (this._validationParams.maxWords > 0 && this._field.getWords().get_length() > this._validationParams.maxWords) {
                        return title + ' cannot contain more than ' + this._validationParams.maxWords + ' word' + ((this._validationParams.maxWords > 1) ? 's' : '');
                    }
                }
                if (!isNullOrUndefined(this._validationParams.fileExtensionsAllowed)) {
                    var extensions = this._validationParams.fileExtensionsAllowed;
                    for (var i = 0; i < extensions.length; i++) {
                        extensions[i] = extensions[i].replace(new RegExp('[; |:-]', 'g'), ',');
                        extensions[i] = extensions[i].replace(new RegExp('\\.', 'g'), '');
                    }
                    var aExtensions = extensions;
                    var found = false;
                    var allowedExtensions = '';
                    var many = false;
                    for (var i = 0; i < aExtensions.length; i++) {
                        var extension = js.com.cs.v2.Util.StringUtil.trim(aExtensions[i]);
                        extension = extension.toLowerCase();
                        if (!isNullOrUndefined(extension)) {
                            if (!extension.startsWith('.')) {
                                extension = '.' + extension;
                            }
                            var indexOf = value.toLowerCase().indexOf(extension);
                            if (indexOf !== -1 && indexOf === (value.length - extension.length)) {
                                found = true;
                                break;
                            }
                            if (i > 0) {
                                if (i < aExtensions.length - 1) {
                                    allowedExtensions += ', ';
                                }
                                else {
                                    allowedExtensions += ' or ';
                                }
                                many = true;
                            }
                            allowedExtensions += extension;
                        }
                    }
                    if (!found) {
                        if (many) {
                            return title + ' must be a file with one of the following extensions: ' + allowedExtensions;
                        }
                        else {
                            return title + ' must be a file with a ' + allowedExtensions + ' file extension';
                        }
                    }
                }
                if (this._validationParams.valueIn != null && this._validationParams.valueIn.get_length() > 0) {
                    var found = js.com.cs.v2.Classes.Forms.Validation.Validation.isValueIn(value, this._validationParams.valueIn, this._validationParams.valueCaseSensitive);
                    if (!found) {
                        var valuesAllowed = this._validationParams.valueIn.join(', ');
                        var msg = title + ' must be ';
                        if (this._validationParams.valueIn.get_length() > 1) {
                            msg += 'one of: ' + valuesAllowed;
                        }
                        else {
                            msg += valuesAllowed;
                        }
                        if (this._validationParams.valueCaseSensitive) {
                            msg += ' (case-sensitive)';
                        }
                        return msg;
                    }
                }
                if (!isNullOrUndefined(this._validationParams.regExpPattern)) {
                    var regExp = this._validationParams.regExpPattern;
                    if (!this._validationParams.regExpPattern.test(value)) {
                        return title + ' - Invalid value';
                    }
                }
            }
        }
        return null;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.Form

js.com.cs.v2.UI.Forms.Form = function js_com_cs_v2_UI_Forms_Form(validationGroup) {
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="currentClickedButton" type="js.com.cs.v2.UI.Forms.Button">
    /// </field>
    /// <field name="_fields" type="Array" elementType="Field">
    /// Array of Field
    /// </field>
    /// <field name="buttons" type="Array" elementType="Button">
    /// Array of Button
    /// </field>
    /// <field name="groups" type="Array" elementType="FieldGroup">
    /// Array of FieldGroup
    /// </field>
    /// <field name="onPreValidation" type="js.com.cs.v2.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onPostValidation" type="js.com.cs.v2.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onSubmit" type="DOMEventHandler">
    /// </field>
    /// <field name="__onSubmitEvent" type="EventHandler">
    /// </field>
    /// <field name="_formFocused" type="Boolean">
    /// </field>
    /// <field name="_submitOnCtrlS" type="Boolean">
    /// </field>
    /// <field name="formElement" type="js.com.cs.v2.Controls.Common.MyFormElement">
    /// </field>
    this._fields = [];
    this.buttons = [];
    this.groups = [];
    this.validationGroup = validationGroup;
    this.init();
}
js.com.cs.v2.UI.Forms.Form.prototype = {
    validationGroup: null,
    currentClickedButton: null,
    _fields: null,
    
    get_fields: function js_com_cs_v2_UI_Forms_Form$get_fields() {
        /// <value type="Array" elementType="Field"></value>
        if (this.validationGroup.indexOf('uploadformUploads') !== -1) {
        }
        return this._fields;
    },
    
    buttons: null,
    groups: null,
    onPreValidation: null,
    onPostValidation: null,
    onSubmit: null,
    
    add_onSubmitEvent: function js_com_cs_v2_UI_Forms_Form$add_onSubmitEvent(value) {
        /// <param name="value" type="Function" />
        this.__onSubmitEvent = Delegate.combine(this.__onSubmitEvent, value);
    },
    remove_onSubmitEvent: function js_com_cs_v2_UI_Forms_Form$remove_onSubmitEvent(value) {
        /// <param name="value" type="Function" />
        this.__onSubmitEvent = Delegate.remove(this.__onSubmitEvent, value);
    },
    
    __onSubmitEvent: null,
    _formFocused: false,
    _submitOnCtrlS: false,
    
    get_submitOnCtrlS: function js_com_cs_v2_UI_Forms_Form$get_submitOnCtrlS() {
        /// <summary>
        /// Whether the form submits when user presses Ctrl + S and is focused
        /// </summary>
        /// <value type="Boolean"></value>
        return this._submitOnCtrlS;
    },
    set_submitOnCtrlS: function js_com_cs_v2_UI_Forms_Form$set_submitOnCtrlS(value) {
        /// <summary>
        /// Whether the form submits when user presses Ctrl + S and is focused
        /// </summary>
        /// <value type="Boolean"></value>
        this._submitOnCtrlS = value;
        this._initKeyHandler();
        return value;
    },
    
    formElement: null,
    
    _DefaultValidationHandler: function js_com_cs_v2_UI_Forms_Form$_DefaultValidationHandler() {
        /// <returns type="Boolean"></returns>
        return true;
    },
    
    init: function js_com_cs_v2_UI_Forms_Form$init() {
        try {
            this.set_submitOnCtrlS(!isNullOrUndefined(shortcut));
        }
        catch (e) {
        }
        this._initKeyHandler();
    },
    
    _initKeyHandler: function js_com_cs_v2_UI_Forms_Form$_initKeyHandler() {
        if (this._submitOnCtrlS) {
            js.com.cs.v2.Util.KeyboardUtil.removeShortcutHandler('Ctrl+S');
            js.com.cs.v2.Util.KeyboardUtil.addShortcutHandler('Ctrl+S', Delegate.create(this, this._shortcutCtrlSPressed));
        }
    },
    
    _shortcutCtrlSPressed: function js_com_cs_v2_UI_Forms_Form$_shortcutCtrlSPressed() {
        if (this._formFocused) {
            this.submit(true, true);
        }
    },
    
    submit: function js_com_cs_v2_UI_Forms_Form$submit(clickDefaultButton, doNotTriggerSubmitEvent) {
        /// <param name="clickDefaultButton" type="Boolean">
        /// </param>
        /// <param name="doNotTriggerSubmitEvent" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        if ((isNullOrUndefined(this.onPreValidation) && (isNullOrUndefined(js.com.cs.v2.UI.Forms.FormsCollection.get_instance().onPreValidation) || js.com.cs.v2.UI.Forms.FormsCollection.get_instance().onPreValidation.invoke(this))) || (!isNullOrUndefined(this.onPreValidation) && this.onPreValidation.invoke(this))) {
            if (this.validate().length === 0) {
                if ((isNullOrUndefined(this.onPostValidation) && (isNullOrUndefined(js.com.cs.v2.UI.Forms.FormsCollection.get_instance().onPostValidation) || js.com.cs.v2.UI.Forms.FormsCollection.get_instance().onPostValidation.invoke(this))) || (!isNullOrUndefined(this.onPostValidation) && this.onPostValidation.invoke(this))) {
                    if (!doNotTriggerSubmitEvent) {
                        if (this.onSubmit != null) {
                            this.onSubmit.invoke();
                        }
                        if (this.__onSubmitEvent != null) {
                            this.__onSubmitEvent.invoke(this, null);
                        }
                        if (js.com.cs.v2.UI.Forms.FormsCollection.get_instance().onSubmit != null) {
                            js.com.cs.v2.UI.Forms.FormsCollection.get_instance().onSubmit.invoke(this);
                        }
                    }
                    js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.get_instance().start();
                    var defBtn = this.getDefaultButton();
                    if (clickDefaultButton) {
                        defBtn.myButton.performClick();
                    }
                    return true;
                }
            }
        }
        return false;
    },
    
    validate: function js_com_cs_v2_UI_Forms_Form$validate() {
        /// <returns type="Array" elementType="FormError"></returns>
        js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.get_instance().updateFormAction(this);
        var errors = new js.com.cs.v2.Classes.General.Arrays.MyArray();
        var alertMsg = '';
        var firstErrorField = null;
        for (var i = 0; i < this.get_fields().length; i++) {
            var f = this.get_fields()[i];
            f.set_hasError(false);
            var errMsg = f.validate(true);
            if (!String.isNullOrEmpty(errMsg)) {
                var e = new js.com.cs.v2.UI.Forms.FormError(f, errMsg);
                errors.push(e);
                if (!String.isNullOrEmpty(alertMsg)) {
                    alertMsg += '\r\n';
                }
                alertMsg += e.errorMsg;
                if (firstErrorField == null) {
                    firstErrorField = f;
                }
            }
        }
        for (var i = 0; i < this.groups.length; i++) {
            var g = this.groups[i];
            var err = g.validate(true, (firstErrorField == null), false);
            if (err != null) {
                errors.push(err);
                if (!String.isNullOrEmpty(alertMsg)) {
                    alertMsg += '\r\n';
                }
                alertMsg += err.errorMsg;
            }
        }
        if (!String.isNullOrEmpty(alertMsg)) {
            alert(alertMsg);
        }
        if (firstErrorField != null) {
            firstErrorField.element.focus();
        }
        return errors.getBaseArray();
    },
    
    getFieldById: function js_com_cs_v2_UI_Forms_Form$getFieldById(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Field"></returns>
        for (var i = 0; i < this._fields.length; i++) {
            var checkField = this._fields[i];
            if (checkField.get_id() === id) {
                return checkField;
            }
        }
        return null;
    },
    
    fieldAlreadyExists: function js_com_cs_v2_UI_Forms_Form$fieldAlreadyExists(field) {
        /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.getFieldById(field.get_id()) != null;
    },
    
    addField: function js_com_cs_v2_UI_Forms_Form$addField(field) {
        /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
        /// </param>
        if (!this.fieldAlreadyExists(field)) {
            if (this.formElement == null) {
                this.formElement = new js.com.cs.v2.Controls.Common.MyFormElement(field.element.get_myDomElement().get_form());
            }
            field.form = this;
            this.get_fields()[this.get_fields().length] = field;
            field.element.get_myDomElement().add_onFocus(Delegate.create(this, this._field_onFocus));
            field.element.get_myDomElement().add_onBlur(Delegate.create(this, this._field_onBlur));
        }
    },
    
    _field_onBlur: function js_com_cs_v2_UI_Forms_Form$_field_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._formFocused = false;
    },
    
    _field_onFocus: function js_com_cs_v2_UI_Forms_Form$_field_onFocus(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._formFocused = true;
    },
    
    addGroup: function js_com_cs_v2_UI_Forms_Form$addGroup(group) {
        /// <param name="group" type="js.com.cs.v2.UI.Forms.FieldGroup">
        /// </param>
        group.form = this;
        this.groups[this.groups.length] = group;
    },
    
    getButtonById: function js_com_cs_v2_UI_Forms_Form$getButtonById(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Button"></returns>
        for (var i = 0; i < this.buttons.length; i++) {
            var btn = this.buttons[i];
            if (btn.get_id() === id) {
                return btn;
            }
        }
        return null;
    },
    
    buttonAlreadyExists: function js_com_cs_v2_UI_Forms_Form$buttonAlreadyExists(button) {
        /// <param name="button" type="js.com.cs.v2.UI.Forms.Button">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.getButtonById(button.get_id()) != null;
    },
    
    addButton: function js_com_cs_v2_UI_Forms_Form$addButton(button) {
        /// <param name="button" type="js.com.cs.v2.UI.Forms.Button">
        /// </param>
        if (this.buttonAlreadyExists(button)) {
            this.removeButtonById(button.get_id());
        }
        if (!this.buttonAlreadyExists(button)) {
            if (this.formElement == null) {
                this.formElement = new js.com.cs.v2.Controls.Common.MyFormElement(button.myButton.get_myDomElement().get_form());
            }
            button.set_form(this);
            this.buttons[this.buttons.length] = button;
        }
    },
    
    getDefaultButton: function js_com_cs_v2_UI_Forms_Form$getDefaultButton() {
        /// <returns type="js.com.cs.v2.UI.Forms.Button"></returns>
        var b = null;
        if (this.buttons.length > 0) {
            b = this.buttons[0];
            for (var i = 0; i < this.buttons.length; i++) {
                var btn = this.buttons[i];
                if (btn.get_defaultButton()) {
                    b = btn;
                    break;
                }
            }
        }
        return b;
    },
    
    removeButtonById: function js_com_cs_v2_UI_Forms_Form$removeButtonById(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this.buttons.length; i++) {
            var btn = this.buttons[i];
            if (btn.get_id() === id) {
                js.com.cs.v2.Util.ArrayUtil.removeItemFromArray(this.buttons, i);
                return true;
            }
        }
        return false;
    },
    
    toString: function js_com_cs_v2_UI_Forms_Form$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Form - ' + this.validationGroup + ']';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FormError

js.com.cs.v2.UI.Forms.FormError = function js_com_cs_v2_UI_Forms_FormError(field, errorMsg) {
    /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
    /// </param>
    /// <param name="errorMsg" type="String">
    /// </param>
    /// <field name="item" type="Object">
    /// </field>
    /// <field name="errorMsg" type="String">
    /// </field>
    this.item = field;
    this.errorMsg = errorMsg;
}
js.com.cs.v2.UI.Forms.FormError.prototype = {
    item: null,
    errorMsg: null,
    
    init: function js_com_cs_v2_UI_Forms_FormError$init() {
    },
    
    toString: function js_com_cs_v2_UI_Forms_FormError$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldError] - ' + this.errorMsg;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.FormsCollection

js.com.cs.v2.UI.Forms.FormsCollection = function js_com_cs_v2_UI_Forms_FormsCollection() {
    /// <summary>
    /// aspNetFormSubmit is a property used to make redundant ASP.Net Form submit (mainly for AJAX)
    /// </summary>
    /// <field name="_Instance" type="js.com.cs.v2.UI.Forms.FormsCollection" static="true">
    /// </field>
    /// <field name="CLICKED_BUTTON" type="Boolean" static="true">
    /// </field>
    /// <field name="FORM_SUBMIT" type="Boolean" static="true">
    /// </field>
    /// <field name="HasFileUpload" type="Boolean" static="true">
    /// </field>
    /// <field name="_forms" type="Object">
    /// </field>
    /// <field name="_items" type="Object">
    /// </field>
    /// <field name="_keyHandlerConnected" type="Boolean">
    /// </field>
    /// <field name="keyEnterEnabled" type="Boolean">
    /// </field>
    /// <field name="showNoDefaultButtonFoundMessage" type="Boolean">
    /// </field>
    /// <field name="_fieldFocus" type="js.com.cs.v2.UI.Forms.Field">
    /// </field>
    /// <field name="currentForm" type="js.com.cs.v2.UI.Forms.Form">
    /// </field>
    /// <field name="onPreValidation" type="js.com.cs.v2.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onPostValidation" type="js.com.cs.v2.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onSubmit" type="js.com.cs.v2.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="_keyBefore" type="Boolean">
    /// </field>
    this.onPostValidation = Delegate.create(this, this._DefaultValidationHandler);
    this.onPreValidation = Delegate.create(this, this._DefaultValidationHandler);
    this._forms = {};
    this._items = {};
}
js.com.cs.v2.UI.Forms.FormsCollection.get_instance = function js_com_cs_v2_UI_Forms_FormsCollection$get_instance() {
    /// <value type="js.com.cs.v2.UI.Forms.FormsCollection"></value>
    if (js.com.cs.v2.UI.Forms.FormsCollection._Instance == null) {
        js.com.cs.v2.UI.Forms.FormsCollection._Instance = new js.com.cs.v2.UI.Forms.FormsCollection();
    }
    return js.com.cs.v2.UI.Forms.FormsCollection._Instance;
}
js.com.cs.v2.UI.Forms.FormsCollection.submitCurrentForm = function js_com_cs_v2_UI_Forms_FormsCollection$submitCurrentForm() {
    js.com.cs.v2.UI.Forms.FormsCollection.get_instance().currentForm.submit(false, false);
}
js.com.cs.v2.UI.Forms.FormsCollection.ASPNetWebFormOnSubmit = function js_com_cs_v2_UI_Forms_FormsCollection$ASPNetWebFormOnSubmit() {
    /// <returns type="Boolean"></returns>
    if (!js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON) {
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().clickCurrentFormDefaultButton();
        return false;
    }
    var btnClicked = js.com.cs.v2.UI.Forms.FormsCollection.get_instance().currentForm.currentClickedButton;
    var errs = btnClicked.get_form().validate();
    var ok = (errs == null || errs.length === 0);
    if (ok) {
        js.com.cs.v2.UI.Forms.FormsCollection.submitCurrentForm();
    }
    return ok;
}
js.com.cs.v2.UI.Forms.FormsCollection.prototype = {
    _forms: null,
    _items: null,
    _keyHandlerConnected: false,
    keyEnterEnabled: true,
    showNoDefaultButtonFoundMessage: true,
    _fieldFocus: null,
    currentForm: null,
    onPreValidation: null,
    onPostValidation: null,
    onSubmit: null,
    
    _DefaultValidationHandler: function js_com_cs_v2_UI_Forms_FormsCollection$_DefaultValidationHandler(form) {
        /// <param name="form" type="js.com.cs.v2.UI.Forms.Form">
        /// </param>
        /// <returns type="Boolean"></returns>
        return true;
    },
    
    _enterPressed: function js_com_cs_v2_UI_Forms_FormsCollection$_enterPressed() {
        if (this.keyEnterEnabled) {
            this.clickCurrentFormDefaultButton();
        }
    },
    
    _keyUp: function js_com_cs_v2_UI_Forms_FormsCollection$_keyUp(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (window.event.keyCode === ScriptFX.UI.Key.enter) {
            if (this.get_fieldWithFocus() != null && this.get_fieldWithFocus().element.get_myDomElement().get_domElement().tagName.toLowerCase() !== 'textarea') {
                this._enterPressed();
            }
        }
    },
    
    _initKeyHandler: function js_com_cs_v2_UI_Forms_FormsCollection$_initKeyHandler(init) {
        /// <param name="init" type="Boolean">
        /// </param>
        if (init) {
            if (!this._keyHandlerConnected) {
                js.com.cs.v2.Classes.General.GeneralClass.getBody().add_onKeyUp(Delegate.create(this, this._keyUp));
                this._keyHandlerConnected = true;
            }
        }
        else {
            if (this._keyHandlerConnected) {
                js.com.cs.v2.Classes.General.GeneralClass.getBody().remove_onKeyUp(Delegate.create(this, this._keyUp));
                this._keyHandlerConnected = false;
            }
        }
    },
    
    _getForm: function js_com_cs_v2_UI_Forms_FormsCollection$_getForm(groupID) {
        /// <param name="groupID" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Form"></returns>
        if (isNullOrUndefined(groupID)) {
            groupID = '__MAIN';
        }
        var f = this._forms[groupID];
        if (isNullOrUndefined(f)) {
            f = new js.com.cs.v2.UI.Forms.Form(groupID);
            this._forms[groupID] = f;
        }
        return f;
    },
    
    removeField: function js_com_cs_v2_UI_Forms_FormsCollection$removeField(field) {
        /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
        /// </param>
        if (field != null) {
            delete this._items[field.get_id()];
            field.destroy();
        }
    },
    
    addField: function js_com_cs_v2_UI_Forms_FormsCollection$addField(field) {
        /// <param name="field" type="js.com.cs.v2.UI.Forms.Field">
        /// </param>
        var validationGroup = field.validationGroup;
        var form = this._getForm(validationGroup);
        var fieldID = field.get_id();
        this._items[fieldID] = field;
        form.addField(field);
    },
    
    addGroup: function js_com_cs_v2_UI_Forms_FormsCollection$addGroup(group) {
        /// <param name="group" type="js.com.cs.v2.UI.Forms.FieldGroup">
        /// </param>
        var ID = group.id;
        var validationGroup = group.validationGroup;
        var form = this._getForm(validationGroup);
        this._items[ID] = group;
        form.addGroup(group);
    },
    
    buttonAlreadyExists: function js_com_cs_v2_UI_Forms_FormsCollection$buttonAlreadyExists(button) {
        /// <param name="button" type="js.com.cs.v2.UI.Forms.Button">
        /// </param>
        /// <returns type="Boolean"></returns>
        var form = this._getForm(button.validationGroup);
        if (form != null && form.buttonAlreadyExists(button)) {
            return true;
        }
        return false;
    },
    
    removeButton: function js_com_cs_v2_UI_Forms_FormsCollection$removeButton(button) {
        /// <param name="button" type="js.com.cs.v2.UI.Forms.Button">
        /// </param>
        var form = this._getForm(button.validationGroup);
        if (form != null) {
            form.removeButtonById(button.get_id());
        }
    },
    
    addButton: function js_com_cs_v2_UI_Forms_FormsCollection$addButton(button) {
        /// <param name="button" type="js.com.cs.v2.UI.Forms.Button">
        /// </param>
        var ID = button.get_id();
        var validationGroup = button.validationGroup;
        var form = this._getForm(validationGroup);
        this._items[ID] = button;
        form.addButton(button);
    },
    
    get_fieldWithFocus: function js_com_cs_v2_UI_Forms_FormsCollection$get_fieldWithFocus() {
        /// <value type="js.com.cs.v2.UI.Forms.Field"></value>
        return this._fieldFocus;
    },
    set_fieldWithFocus: function js_com_cs_v2_UI_Forms_FormsCollection$set_fieldWithFocus(value) {
        /// <value type="js.com.cs.v2.UI.Forms.Field"></value>
        this._fieldFocus = value;
        this._initKeyHandler(!isNullOrUndefined(this._fieldFocus));
        if (this._fieldFocus == null) {
        }
        else {
            this.currentForm = this._fieldFocus.form;
        }
        return value;
    },
    
    _keyBefore: false,
    
    _clickCurrentFormDefaultButton_Callback: function js_com_cs_v2_UI_Forms_FormsCollection$_clickCurrentFormDefaultButton_Callback() {
        this.keyEnterEnabled = this._keyBefore;
        js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    clickCurrentFormDefaultButton: function js_com_cs_v2_UI_Forms_FormsCollection$clickCurrentFormDefaultButton() {
        js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
        var form = this.currentForm;
        if (form != null) {
            this._keyBefore = this.keyEnterEnabled;
            this.keyEnterEnabled = false;
            var defaultButton = form.getDefaultButton();
            if (defaultButton != null) {
                defaultButton.myButton.performClick();
            }
            else {
                if (this.showNoDefaultButtonFoundMessage) {
                    alert('No default button specified for group: ' + this.currentForm.validationGroup + '.\n\nPlease specify one or else remove Validation Group');
                }
            }
        }
        js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    validateCurrentForm: function js_com_cs_v2_UI_Forms_FormsCollection$validateCurrentForm() {
        /// <returns type="Array" elementType="FormError"></returns>
        var form = this.currentForm;
        js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.get_instance().updateFormAction(form);
        if (form != null) {
            var errors = form.validate();
            if (errors == null || errors.length === 0) {
                if (js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.get_instance() != null) {
                    if (js.com.cs.v2.UI.Forms.FormsCollection.HasFileUpload) {
                        js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.get_instance().start();
                    }
                }
            }
            return errors;
        }
        else {
            return [];
        }
    },
    
    _init: function js_com_cs_v2_UI_Forms_FormsCollection$_init() {
    },
    
    getGroupByID: function js_com_cs_v2_UI_Forms_FormsCollection$getGroupByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.FieldGroup"></returns>
        return this._items[id];
    },
    
    getFieldByID: function js_com_cs_v2_UI_Forms_FormsCollection$getFieldByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Field"></returns>
        return this._items[id];
    },
    
    getButtonByID: function js_com_cs_v2_UI_Forms_FormsCollection$getButtonByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Button"></returns>
        return this._items[id];
    },
    
    getFormByID: function js_com_cs_v2_UI_Forms_FormsCollection$getFormByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.Form"></returns>
        return this._forms[id];
    },
    
    clearForm: function js_com_cs_v2_UI_Forms_FormsCollection$clearForm(formValidationGroupID) {
        /// <param name="formValidationGroupID" type="String">
        /// </param>
        this._forms[formValidationGroupID] = null;
    },
    
    toString: function js_com_cs_v2_UI_Forms_FormsCollection$toString() {
        /// <returns type="String"></returns>
        return 'FormsCollection';
    }
}


Type.createNamespace('js.com.cs.v2.UI.Forms.LinkedMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox

js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox = function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox(cmb, levelIndex, linkedMenu, disabledText) {
    /// <param name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
    /// </param>
    /// <param name="levelIndex" type="Number" integer="true">
    /// </param>
    /// <param name="linkedMenu" type="js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass">
    /// </param>
    /// <param name="disabledText" type="String">
    /// </param>
    /// <field name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="linkedMenu" type="js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass">
    /// </field>
    /// <field name="disabledText" type="String">
    /// </field>
    /// <field name="_currentOnChangeHandler" type="DOMEventHandler">
    /// </field>
    /// <field name="_currentValue" type="String">
    /// </field>
    /// <field name="_initiallyDisabled" type="Boolean">
    /// </field>
    /// <field name="linkedMenuLevels" type="Array" elementType="LinkedMenuLevel">
    /// </field>
    if (Type.canCast(cmb, String)) {
        this.cmb = new js.com.cs.v2.Controls.Form.MyDropDownList(cmb);
    }
    else {
        this.cmb = cmb;
    }
    this.levelIndex = levelIndex;
    this.linkedMenu = linkedMenu;
    this.disabledText = disabledText;
    this._currentOnChangeHandler = cmb.onchange;
    this._initiallyDisabled = cmb.get_disabled();
    this._init();
}
js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox.prototype = {
    cmb: null,
    levelIndex: 0,
    linkedMenu: null,
    disabledText: null,
    _currentOnChangeHandler: null,
    _currentValue: null,
    _initiallyDisabled: false,
    linkedMenuLevels: null,
    
    _getLinkedMenuLevel: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$_getLinkedMenuLevel(value) {
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel"></returns>
        for (var i = 0; i < this.linkedMenuLevels.length; i++) {
            var level = this.linkedMenuLevels[i];
            if (level.option.value === value) {
                return level;
            }
        }
        return null;
    },
    
    _onChange: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$_onChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var value = this.cmb.get_value();
        if (value === this._currentValue) {
            return;
        }
        this._currentValue = value;
        if (this._currentOnChangeHandler != null) {
            this._currentOnChangeHandler.invoke();
        }
        var level = this._getLinkedMenuLevel(value);
        if (level.children.length > 0) {
            this.linkedMenu.populateLevel(this.levelIndex + 1, level.children);
        }
        else {
            this.linkedMenu.disableOtherLevels(this.levelIndex);
        }
    },
    
    _initHandlers: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$_initHandlers() {
        this.cmb.add_onChange(Delegate.create(this, this._onChange));
        this.cmb.add_onKeyDown(Delegate.create(this, this._onChange));
    },
    
    _clearItems: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$_clearItems() {
        while (this.cmb.get_options().length > 0) {
            this.cmb.removeItem(0);
        }
    },
    
    _init: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$_init() {
        this._clearItems();
        this._initHandlers();
    },
    
    enable: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$enable() {
        if (this._initiallyDisabled) {
            return;
        }
        this.cmb.set_disabled(false);
        this.cmb.get_style().backgroundColor = null;
        this.cmb.set_cssClass(null);
    },
    
    disable: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$disable() {
        if (this._initiallyDisabled) {
            return;
        }
        this.cmb.set_disabled(true);
        this._clearItems();
        var opt = document.createElement('option');
        opt.text = this.disabledText;
        this.cmb.addItemFromOption(opt);
        this.cmb.set_cssClass(this.linkedMenu.cssDisabled);
    },
    
    populate: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuComboBox$populate(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="Array" elementType="LinkedMenuLevel">
        /// </param>
        /// <returns type="Boolean"></returns>
        this._clearItems();
        this.linkedMenuLevels = linkedMenuLevels;
        var selectedLevel = null;
        var selectedLevelIndex = -1;
        var hasGotSubLevels = false;
        for (var i = 0; i < this.linkedMenuLevels.length; i++) {
            var level = linkedMenuLevels[i];
            var opt = level.option;
            this.cmb.addItemFromOption(opt);
            if (level.selected && selectedLevel == null) {
                selectedLevel = level;
                selectedLevelIndex = i;
            }
        }
        if (selectedLevel == null && linkedMenuLevels.length > 0) {
            selectedLevel = linkedMenuLevels[0];
            selectedLevelIndex = 0;
        }
        if (selectedLevel != null && selectedLevel.children.length > 0) {
            this._currentValue = selectedLevel.option.value;
            this.linkedMenu.populateLevel(this.levelIndex + 1, selectedLevel.children);
            hasGotSubLevels = true;
        }
        this.cmb.set_selectedIndex(selectedLevelIndex);
        return hasGotSubLevels;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel

js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel = function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuLevel(title, value, selected) {
    /// <param name="title" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <param name="selected" type="Boolean">
    /// </param>
    /// <field name="option" type="Object" domElement="true">
    /// </field>
    /// <field name="selected" type="Boolean">
    /// </field>
    /// <field name="children" type="Array" elementType="LinkedMenuLevel">
    /// </field>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="value" type="String">
    /// </field>
    if (isNullOrUndefined(selected)) {
        selected = false;
    }
    this.option = document.createElement('option');
    this.option.text = title;
    this.option.title = title;
    this.option.value = value;
    this.title = title;
    this.value = value;
    this.selected = selected;
    this.children = [];
}
js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel.prototype = {
    option: null,
    selected: false,
    children: null,
    title: null,
    value: null,
    
    addSubLevel: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuLevel$addSubLevel(linkedMenuLevel) {
        /// <param name="linkedMenuLevel" type="js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel">
        /// </param>
        this.children[this.children.length] = linkedMenuLevel;
    },
    
    addSubLevels: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuLevel$addSubLevels(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="Array" elementType="LinkedMenuLevel">
        /// </param>
        for (var i = 0; i < linkedMenuLevels.length; i++) {
            this.addSubLevel(linkedMenuLevels[i]);
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass

js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass = function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass() {
    /// <field name="_cmbs" type="Array" elementType="LinkedMenuComboBox">
    /// </field>
    /// <field name="_root" type="Object">
    /// </field>
    /// <field name="cssDisabled" type="String">
    /// </field>
    this._cmbs = [];
}
js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass.prototype = {
    _cmbs: null,
    _root: null,
    cssDisabled: null,
    
    _parseCmbs: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass$_parseCmbs(cmbs) {
        /// <param name="cmbs" type="Array" elementType="MyDropDownList">
        /// </param>
        for (var i = 0; i < cmbs.length; i++) {
            var cmb = cmbs[i];
            if (Type.canCast(cmb, String)) {
                cmb = new js.com.cs.v2.Controls.Form.MyDropDownList(cmb);
                this._cmbs[this._cmbs.length] = new js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox(cmb, i, this, null);
            }
        }
    },
    
    _enableAllLevels: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass$_enableAllLevels() {
        for (var i = 0; i < this._cmbs.length; i++) {
            var cmb = this._cmbs[i];
            cmb.enable();
        }
    },
    
    disableOtherLevels: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass$disableOtherLevels(levelIndex) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        for (var i = levelIndex + 1; i < this._cmbs.length; i++) {
            var cmb = this._cmbs[i];
            cmb.disable();
        }
    },
    
    populateLevel: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass$populateLevel(levelIndex, linkedMenuLevels) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        /// <param name="linkedMenuLevels" type="Array" elementType="LinkedMenuLevel">
        /// </param>
        this._enableAllLevels();
        if (levelIndex >= this._cmbs.length) {
            alert('com.cs.forms.LinkedMenu: Please specify a combo box for level ' + (levelIndex + 1) + ' because at the moment only ' + this._cmbs.length + ' level(s) are specified');
        }
        var hasGotSubLevels = this._cmbs[levelIndex].populate(linkedMenuLevels);
        if (!hasGotSubLevels) {
            this.disableOtherLevels(levelIndex);
        }
    },
    
    init: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass$init(rootLevel) {
        /// <param name="rootLevel" type="js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel">
        /// </param>
        this._root = rootLevel;
        this.populateLevel(0, rootLevel.children);
    },
    
    addComboBox: function js_com_cs_v2_UI_Forms_LinkedMenu_LinkedMenuClass$addComboBox(cmb, disabledText) {
        /// <param name="cmb" type="js.com.cs.v2.Controls.Form.MyDropDownList">
        /// </param>
        /// <param name="disabledText" type="String">
        /// </param>
        if (Type.canCast(cmb, String)) {
            cmb = new js.com.cs.v2.Controls.Form.MyDropDownList(cmb);
        }
        var cmbBox = new js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox(cmb, this._cmbs.length, this, disabledText);
        this._cmbs[this._cmbs.length] = cmbBox;
    }
}


Type.createNamespace('js.com.cs.v2.UI.HelpMessageIcon');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon

js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon = function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon(itemID, helpMessage, customCSS) {
    /// <param name="itemID" type="String">
    /// </param>
    /// <param name="helpMessage" type="String">
    /// </param>
    /// <param name="customCSS" type="String">
    /// </param>
    /// <field name="_elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_divMessage" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_customCSS" type="String">
    /// </field>
    /// <field name="_aHelpIcon" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_ctrlPositioner" type="js.com.cs.v2.UI.CtrlPositioner">
    /// </field>
    /// <field name="_fadE_DURATION_MS" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_fadE_ALPHA" type="Number" static="true">
    /// </field>
    this._elem = new js.com.cs.v2.Controls.Common.MyDOMElement(itemID);
    this._customCSS = customCSS;
    this._initMessage(helpMessage);
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon.prototype = {
    _elem: null,
    _divMessage: null,
    _customCSS: null,
    _aHelpIcon: null,
    _ctrlPositioner: null,
    
    _updateContainer: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_updateContainer() {
    },
    
    _initMessage: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_initMessage(msg) {
        /// <param name="msg" type="String">
        /// </param>
        this._divMessage = new js.com.cs.v2.Controls.Common.MyDivElement();
        this._divMessage.addClass('help-message');
        this._divMessage.set_innerHTML(msg);
        if (!String.isNullOrEmpty(this._customCSS)) {
            this._divMessage.addClass(this._customCSS);
        }
    },
    
    _initHelpIcon: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_initHelpIcon() {
        this._aHelpIcon = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        this._aHelpIcon.addClass('help-icon');
        this._aHelpIcon.get_jQueryElement().attr('disabled', 'disabled');
        this._aHelpIcon.set_href('javascript:');
        this._aHelpIcon.add_onMouseEnter(Delegate.create(this, this._aHelpIcon_onMouseEnter));
        this._aHelpIcon.add_onMouseLeave(Delegate.create(this, this._aHelpIcon_onMouseLeave));
        if (!String.isNullOrEmpty(this._customCSS)) {
            this._aHelpIcon.addClass(this._customCSS);
        }
    },
    
    _aHelpIcon_onMouseLeave: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_aHelpIcon_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._divMessage.get_jQueryElement().stop(true);
        this._divMessage.get_jQueryElement().fadeOut(js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon._fadE_DURATION_MS);
    },
    
    _aHelpIcon_onMouseEnter: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_aHelpIcon_onMouseEnter(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._divMessage.get_jQueryElement().stop(true);
        this._divMessage.set_opacity(js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon._fadE_ALPHA);
        this._divMessage.get_jQueryElement().fadeOut(0);
        this._divMessage.get_jQueryElement().fadeIn(js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon._fadE_DURATION_MS);
    },
    
    _initPosition: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_initPosition() {
        this._ctrlPositioner = new js.com.cs.v2.UI.CtrlPositioner();
        this._ctrlPositioner.positionControl(this._elem, this._aHelpIcon);
        this._aHelpIcon.get_parent().appendChild(this._divMessage);
        this._divMessage.get_jQueryElement().css('position', 'absolute');
        this._divMessage.get_jQueryElement().css('top', 0);
        this._divMessage.get_jQueryElement().css('left', this._aHelpIcon.getLeft() + this._aHelpIcon.getOuterWidth(true));
        this._divMessage.set_opacity(0);
        this._divMessage.get_jQueryElement().fadeOut(0);
        this._aHelpIcon.get_parent().addClass('help-message-container');
    },
    
    _init: function js_com_cs_v2_UI_HelpMessageIcon_HelpMessageIcon$_init() {
        this._initHelpIcon();
        this._initPosition();
    }
}


Type.createNamespace('js.com.cs.v2.UI.IBar');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.IBar.BarType

js.com.cs.v2.UI.IBar.BarType = function() { 
    /// <field name="successBar" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="errorBar" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="informationBar" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.IBar.BarType.prototype = {
    successBar: 0, 
    errorBar: 1, 
    informationBar: 2
}
js.com.cs.v2.UI.IBar.BarType.createEnum('js.com.cs.v2.UI.IBar.BarType', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.IBar.InformationBar

js.com.cs.v2.UI.IBar.InformationBar = function js_com_cs_v2_UI_IBar_InformationBar(typeOfJqueryBar, BarText, barProperties) {
    /// <param name="typeOfJqueryBar" type="js.com.cs.v2.UI.IBar.BarType">
    /// </param>
    /// <param name="BarText" type="String">
    /// </param>
    /// <param name="barProperties" type="js.com.cs.v2.UI.IBar.InformationBarProperties">
    /// </param>
    /// <field name="__onClosed$2" type="js.com.cs.v2.UI.IBar.BarEventHandler">
    /// </field>
    /// <field name="__onBeginClosing$2" type="js.com.cs.v2.UI.IBar.BarEventHandler">
    /// </field>
    /// <field name="_typeOfJqueryBar$2" type="js.com.cs.v2.UI.IBar.BarType">
    /// </field>
    /// <field name="_barText$2" type="String">
    /// </field>
    /// <field name="_barProperties$2" type="js.com.cs.v2.UI.IBar.InformationBarProperties">
    /// </field>
    js.com.cs.v2.UI.IBar.InformationBar.constructBase(this);
    this._typeOfJqueryBar$2 = typeOfJqueryBar;
    this._barText$2 = BarText;
    this._checkInformationBarProperties$2(barProperties);
    this._init$2();
    this._animateBar$2();
}
js.com.cs.v2.UI.IBar.InformationBar.prototype = {
    
    add_onClosed: function js_com_cs_v2_UI_IBar_InformationBar$add_onClosed(value) {
        /// <summary>
        /// Events for closing the Information bar
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onClosed$2 = Delegate.combine(this.__onClosed$2, value);
    },
    remove_onClosed: function js_com_cs_v2_UI_IBar_InformationBar$remove_onClosed(value) {
        /// <summary>
        /// Events for closing the Information bar
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onClosed$2 = Delegate.remove(this.__onClosed$2, value);
    },
    
    __onClosed$2: null,
    
    add_onBeginClosing: function js_com_cs_v2_UI_IBar_InformationBar$add_onBeginClosing(value) {
        /// <param name="value" type="Function" />
        this.__onBeginClosing$2 = Delegate.combine(this.__onBeginClosing$2, value);
    },
    remove_onBeginClosing: function js_com_cs_v2_UI_IBar_InformationBar$remove_onBeginClosing(value) {
        /// <param name="value" type="Function" />
        this.__onBeginClosing$2 = Delegate.remove(this.__onBeginClosing$2, value);
    },
    
    __onBeginClosing$2: null,
    _typeOfJqueryBar$2: 0,
    _barText$2: null,
    _barProperties$2: null,
    
    _animateBar$2: function js_com_cs_v2_UI_IBar_InformationBar$_animateBar$2() {
        this.get_jQueryElement().slideUp(0);
        if (this._barProperties$2.slideDown) {
            this.get_jQueryElement().slideDown(this._barProperties$2.slideDuration);
        }
    },
    
    _checkInformationBarProperties$2: function js_com_cs_v2_UI_IBar_InformationBar$_checkInformationBarProperties$2(barProperties) {
        /// <param name="barProperties" type="js.com.cs.v2.UI.IBar.InformationBarProperties">
        /// </param>
        if (barProperties == null) {
            barProperties = new js.com.cs.v2.UI.IBar.InformationBarProperties();
        }
        this._barProperties$2 = barProperties;
    },
    
    _generateBar$2: function js_com_cs_v2_UI_IBar_InformationBar$_generateBar$2(typeOfBar, BarText) {
        /// <param name="typeOfBar" type="js.com.cs.v2.UI.IBar.BarType">
        /// </param>
        /// <param name="BarText" type="String">
        /// </param>
        switch (this._typeOfJqueryBar$2) {
            case js.com.cs.v2.UI.IBar.BarType.successBar:
                this._generateSuccessBar$2(BarText);
                break;
            case js.com.cs.v2.UI.IBar.BarType.errorBar:
                this._generateErrorBar$2(BarText);
                break;
            case js.com.cs.v2.UI.IBar.BarType.informationBar:
                this._generateInformationBar$2(BarText);
                break;
        }
    },
    
    _init$2: function js_com_cs_v2_UI_IBar_InformationBar$_init$2() {
        this._generateBar$2(this._typeOfJqueryBar$2, this._barText$2);
    },
    
    _barGenerator$2: function js_com_cs_v2_UI_IBar_InformationBar$_barGenerator$2(BarText) {
        /// <param name="BarText" type="String">
        /// </param>
        var backgroundElement = new js.com.cs.v2.Controls.Common.MyDivElement();
        backgroundElement.set_cssClass('bar-background');
        var mainWrapperElement = new js.com.cs.v2.Controls.Common.MyDivElement();
        mainWrapperElement.set_cssClass('bar-main-content');
        var mainWrapperElementWrapper = new js.com.cs.v2.Controls.Common.MyDivElement();
        mainWrapperElementWrapper.appendChild(mainWrapperElement);
        mainWrapperElementWrapper.set_cssClass('bar-main-content-wrapper');
        var mainImageElement = new js.com.cs.v2.Controls.Common.MyDivElement();
        var mainSpanElement = new js.com.cs.v2.Controls.Common.MySpanElement();
        var mainCloseButtonElement = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        mainSpanElement.set_innerHTML(BarText);
        mainImageElement.set_cssClass('bar-main-image');
        mainSpanElement.set_cssClass('bar-main-text');
        mainCloseButtonElement.set_cssClass('bar-main-close');
        mainWrapperElement.appendChild(mainImageElement);
        mainWrapperElement.appendChild(mainSpanElement);
        mainWrapperElement.appendChild(mainCloseButtonElement);
        mainCloseButtonElement.add_onClick(Delegate.create(this, this._mainCloseButtonElement_onClick$2));
        var mainContainer = new js.com.cs.v2.Controls.Common.MyDivElement();
        mainContainer.set_cssClass('bar-container');
        mainContainer.appendChild(backgroundElement);
        mainContainer.appendChild(mainWrapperElementWrapper);
        this.appendChild(mainContainer);
        this._attachBarToBody$2();
        this._setElementOpacity$2(backgroundElement);
    },
    
    _mainCloseButtonElement_onClick$2: function js_com_cs_v2_UI_IBar_InformationBar$_mainCloseButtonElement_onClick$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onBeginClosing$2 != null) {
            this.__onBeginClosing$2.invoke();
        }
        if (this._barProperties$2.slideUp) {
            this.get_jQueryElement().slideUp(this._barProperties$2.slideDuration, Delegate.create(this, this._informationBarClosed$2));
        }
    },
    
    _informationBarClosed$2: function js_com_cs_v2_UI_IBar_InformationBar$_informationBarClosed$2() {
        if (this.__onClosed$2 != null) {
            this.__onClosed$2.invoke();
        }
        document.body.removeChild(this.get_domElement());
    },
    
    _setElementOpacity$2: function js_com_cs_v2_UI_IBar_InformationBar$_setElementOpacity$2(element) {
        /// <param name="element" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        element.set_opacity(this._barProperties$2.opacity);
    },
    
    _attachBarToBody$2: function js_com_cs_v2_UI_IBar_InformationBar$_attachBarToBody$2() {
        if (this._barProperties$2.attachToBody) {
            js.com.JQueryScriptSharp.jQueryUtil.select('body').prepend(this.get_domElement());
        }
    },
    
    _generateErrorBar$2: function js_com_cs_v2_UI_IBar_InformationBar$_generateErrorBar$2(BarText) {
        /// <param name="BarText" type="String">
        /// </param>
        this.set_cssClass('error-bar');
        this._barGenerator$2(BarText);
    },
    
    _generateInformationBar$2: function js_com_cs_v2_UI_IBar_InformationBar$_generateInformationBar$2(BarText) {
        /// <param name="BarText" type="String">
        /// </param>
        this.set_cssClass('information-bar');
        this._barGenerator$2(BarText);
    },
    
    _generateSuccessBar$2: function js_com_cs_v2_UI_IBar_InformationBar$_generateSuccessBar$2(BarText) {
        /// <param name="BarText" type="String">
        /// </param>
        this.set_cssClass('success-bar');
        this._barGenerator$2(BarText);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.IBar.InformationBarProperties

js.com.cs.v2.UI.IBar.InformationBarProperties = function js_com_cs_v2_UI_IBar_InformationBarProperties() {
    /// <field name="attachToBody" type="Boolean">
    /// </field>
    /// <field name="slideUp" type="Boolean">
    /// </field>
    /// <field name="slideDown" type="Boolean">
    /// </field>
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
    /// <field name="opacity" type="Number">
    /// </field>
    this.attachToBody = true;
    this.slideDuration = 600;
    this.slideUp = true;
    this.slideDown = true;
    this.opacity = 0.9;
}
js.com.cs.v2.UI.IBar.InformationBarProperties.prototype = {
    attachToBody: false,
    slideUp: false,
    slideDown: false,
    slideDuration: 0,
    opacity: 0
}


Type.createNamespace('js.com.cs.v2.UI.Images.HelperClasses');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.HelperClasses._ChangeCaption_OnEndClass

js.com.cs.v2.UI.Images.HelperClasses._ChangeCaption_OnEndClass = function js_com_cs_v2_UI_Images_HelperClasses__ChangeCaption_OnEndClass() {
    /// <field name="elemCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="defaultDuration" type="Number" integer="true">
    /// </field>
    /// <field name="caption" type="String">
    /// </field>
}
js.com.cs.v2.UI.Images.HelperClasses._ChangeCaption_OnEndClass.prototype = {
    elemCaption: null,
    defaultDuration: 0,
    caption: null,
    
    onEnd: function js_com_cs_v2_UI_Images_HelperClasses__ChangeCaption_OnEndClass$onEnd() {
        this.elemCaption.set_innerHTML(this.caption);
        js.com.cs.v2.Util.DojoToJQueryWrapper.animateProperty(this.elemCaption, this.defaultDuration, { properties: 1 }, null);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.HelperClasses._ChangeImage_OnEndClass

js.com.cs.v2.UI.Images.HelperClasses._ChangeImage_OnEndClass = function js_com_cs_v2_UI_Images_HelperClasses__ChangeImage_OnEndClass() {
    /// <field name="currImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="newImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="defaultDuration" type="Number" integer="true">
    /// </field>
    /// <field name="caption" type="String">
    /// </field>
}
js.com.cs.v2.UI.Images.HelperClasses._ChangeImage_OnEndClass.prototype = {
    currImage: null,
    newImage: null,
    defaultDuration: 0,
    caption: null,
    
    _onEnd_End: function js_com_cs_v2_UI_Images_HelperClasses__ChangeImage_OnEndClass$_onEnd_End() {
    },
    
    onEnd: function js_com_cs_v2_UI_Images_HelperClasses__ChangeImage_OnEndClass$onEnd() {
        this.newImage.get_style().display = '';
        this.currImage.get_style().display = 'none';
        this.newImage.set_alt(this.caption);
        js.com.cs.v2.Util.DojoToJQueryWrapper.animateProperty(this.newImage, this.defaultDuration, { opacity: 1 }, Delegate.create(this, this._onEnd_End));
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.HelperClasses.OnImageLoadedHandlerClass

js.com.cs.v2.UI.Images.HelperClasses.OnImageLoadedHandlerClass = function js_com_cs_v2_UI_Images_HelperClasses_OnImageLoadedHandlerClass(slideShow, index, fromSlideShow) {
    /// <param name="slideShow" type="js.com.cs.v2.UI.Images.SlideShow">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    /// <param name="fromSlideShow" type="Boolean">
    /// </param>
    /// <field name="index" type="Number" integer="true">
    /// </field>
    /// <field name="slideShow" type="js.com.cs.v2.UI.Images.SlideShow">
    /// </field>
    /// <field name="fromSlideshow" type="Boolean">
    /// </field>
    this.slideShow = slideShow;
    this.index = index;
    this.fromSlideshow = fromSlideShow;
}
js.com.cs.v2.UI.Images.HelperClasses.OnImageLoadedHandlerClass.prototype = {
    index: 0,
    slideShow: null,
    fromSlideshow: false,
    
    onImageLoaded: function js_com_cs_v2_UI_Images_HelperClasses_OnImageLoadedHandlerClass$onImageLoaded(loadingIndex, imgSrc, success) {
        /// <param name="loadingIndex" type="Number" integer="true">
        /// </param>
        /// <param name="imgSrc" type="String">
        /// </param>
        /// <param name="success" type="Boolean">
        /// </param>
        if (loadingIndex === this.index) {
            this.slideShow.changeImage(this.index, this.fromSlideshow);
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.HelperClasses.OnReadyChangingImageClass

js.com.cs.v2.UI.Images.HelperClasses.OnReadyChangingImageClass = function js_com_cs_v2_UI_Images_HelperClasses_OnReadyChangingImageClass(slideShow, img, fromSlideShow) {
    /// <param name="slideShow" type="js.com.cs.v2.UI.Images.SlideShow">
    /// </param>
    /// <param name="img" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </param>
    /// <param name="fromSlideShow" type="Boolean">
    /// </param>
    /// <field name="slideShow" type="js.com.cs.v2.UI.Images.SlideShow">
    /// </field>
    /// <field name="image" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="fromSlideshow" type="Boolean">
    /// </field>
    this.slideShow = slideShow;
    this.image = img;
    this.fromSlideshow = fromSlideShow;
}
js.com.cs.v2.UI.Images.HelperClasses.OnReadyChangingImageClass.prototype = {
    slideShow: null,
    image: null,
    fromSlideshow: false,
    
    onReadyChangingImage: function js_com_cs_v2_UI_Images_HelperClasses_OnReadyChangingImageClass$onReadyChangingImage() {
        if (this.slideShow._imagesPreloader.addToDOM) {
            this.slideShow._imgTag = this.image;
        }
        if (this.fromSlideshow) {
            this.slideShow._delayAndShowNext();
        }
    }
}


Type.createNamespace('js.com.cs.v2.UI.Images');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.ImagesGeneralUtil

js.com.cs.v2.UI.Images.ImagesGeneralUtil = function js_com_cs_v2_UI_Images_ImagesGeneralUtil() {
}
js.com.cs.v2.UI.Images.ImagesGeneralUtil._changeCaption = function js_com_cs_v2_UI_Images_ImagesGeneralUtil$_changeCaption(elemCaption, caption, useJQuery, defaultDuration) {
    /// <param name="elemCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="caption" type="String">
    /// </param>
    /// <param name="useJQuery" type="Boolean">
    /// </param>
    /// <param name="defaultDuration" type="Number" integer="true">
    /// </param>
    if (defaultDuration === 0) {
        defaultDuration = 500;
    }
    if (String.isNullOrEmpty(caption)) {
        caption = 'No caption available';
    }
    if (elemCaption != null) {
        var tmpClass = new js.com.cs.v2.UI.Images.HelperClasses._ChangeCaption_OnEndClass();
        tmpClass.defaultDuration = defaultDuration;
        tmpClass.caption = caption;
        tmpClass.elemCaption = elemCaption;
        if (useJQuery) {
            js.com.cs.v2.Util.DojoToJQueryWrapper.animateProperty(elemCaption, defaultDuration, { opacity: 0 }, Delegate.create(tmpClass, tmpClass.onEnd));
        }
        else {
            elemCaption.set_innerHTML(caption);
        }
    }
}
js.com.cs.v2.UI.Images.ImagesGeneralUtil._changeImage = function js_com_cs_v2_UI_Images_ImagesGeneralUtil$_changeImage(addToDOM, currImage, newImage, elemCaption, caption, onImageChanged, useJQuery, defaultDuration, onReady, imageDetails) {
    /// <param name="addToDOM" type="Boolean">
    /// </param>
    /// <param name="currImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </param>
    /// <param name="newImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </param>
    /// <param name="elemCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="caption" type="String">
    /// </param>
    /// <param name="onImageChanged" type="js.com.cs.v2.UI.Images.OnImageChangedHandler">
    /// </param>
    /// <param name="useJQuery" type="Boolean">
    /// </param>
    /// <param name="defaultDuration" type="Number" integer="true">
    /// </param>
    /// <param name="onReady" type="DOMEventHandler">
    /// </param>
    /// <param name="imageDetails" type="js.com.cs.v2.UI.Images.MediaItem">
    /// </param>
    if (defaultDuration === 0) {
        defaultDuration = 500;
    }
    if (addToDOM) {
        if (onImageChanged != null) {
            onImageChanged.invoke(currImage, newImage, caption, onReady, imageDetails);
        }
        else {
            var tmpClass = new js.com.cs.v2.UI.Images.HelperClasses._ChangeImage_OnEndClass();
            tmpClass.caption = caption;
            tmpClass.newImage = newImage;
            tmpClass.currImage = currImage;
            if (useJQuery) {
                js.com.cs.v2.Util.DojoToJQueryWrapper.animateProperty(currImage, defaultDuration, { opacity: 0 }, Delegate.create(tmpClass, tmpClass.onEnd));
            }
            else {
                currImage.get_style().display = 'none';
                newImage.get_style().display = '';
                newImage.set_alt(caption);
            }
            js.com.cs.v2.UI.Images.ImagesGeneralUtil._changeCaption(elemCaption, caption, useJQuery, defaultDuration);
        }
    }
    else {
        if (onImageChanged != null) {
            onImageChanged.invoke(currImage, newImage, caption, onReady, imageDetails);
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.MediaGallery

js.com.cs.v2.UI.Images.MediaGallery = function js_com_cs_v2_UI_Images_MediaGallery() {
    /// <field name="__onItemChanged" type="js.com.cs.v2.UI.Images.OnItemChangedHandler">
    /// </field>
    /// <field name="__onImageChanged" type="js.com.cs.v2.UI.Images.OnImageChangedHandler">
    /// </field>
    /// <field name="_thumbnails" type="Array" elementType="GalleryThumbnail">
    /// </field>
    /// <field name="_elemCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_shownFirstImage" type="Boolean">
    /// </field>
    /// <field name="_mainItemContainer" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_currShownMainItem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_initial" type="Boolean">
    /// </field>
    /// <field name="csS_ThumbnailUp" type="String">
    /// </field>
    /// <field name="csS_ThumbnailOver" type="String">
    /// </field>
    /// <field name="csS_ThumbnailSelected" type="String">
    /// </field>
    /// <field name="attachCSSToParent" type="Boolean">
    /// </field>
}
js.com.cs.v2.UI.Images.MediaGallery.prototype = {
    
    add_onItemChanged: function js_com_cs_v2_UI_Images_MediaGallery$add_onItemChanged(value) {
        /// <param name="value" type="Function" />
        this.__onItemChanged = Delegate.combine(this.__onItemChanged, value);
    },
    remove_onItemChanged: function js_com_cs_v2_UI_Images_MediaGallery$remove_onItemChanged(value) {
        /// <param name="value" type="Function" />
        this.__onItemChanged = Delegate.remove(this.__onItemChanged, value);
    },
    
    __onItemChanged: null,
    
    add_onImageChanged: function js_com_cs_v2_UI_Images_MediaGallery$add_onImageChanged(value) {
        /// <param name="value" type="Function" />
        this.__onImageChanged = Delegate.combine(this.__onImageChanged, value);
    },
    remove_onImageChanged: function js_com_cs_v2_UI_Images_MediaGallery$remove_onImageChanged(value) {
        /// <param name="value" type="Function" />
        this.__onImageChanged = Delegate.remove(this.__onImageChanged, value);
    },
    
    __onImageChanged: null,
    _thumbnails: null,
    _elemCaption: null,
    _shownFirstImage: false,
    _mainItemContainer: null,
    _currShownMainItem: null,
    _initial: true,
    csS_ThumbnailUp: 'gallery_thumb_up',
    csS_ThumbnailOver: 'gallery_thumb_over',
    csS_ThumbnailSelected: 'gallery_thumb_selected',
    attachCSSToParent: false,
    
    _clearContainer: function js_com_cs_v2_UI_Images_MediaGallery$_clearContainer() {
        if (this._currShownMainItem != null) {
            this._mainItemContainer.removeChild(this._currShownMainItem);
            this._currShownMainItem = null;
        }
        if (!this._initial) {
            while (this._mainItemContainer.get_domElement().childNodes.length > 0) {
                this._mainItemContainer.removeChild(this._mainItemContainer.get_domElement().firstChild);
            }
        }
        this._initial = false;
    },
    
    _thumbnailClick: function js_com_cs_v2_UI_Images_MediaGallery$_thumbnailClick(thumbnail) {
        /// <param name="thumbnail" type="js.com.cs.v2.UI.Images.GalleryThumbnail">
        /// </param>
        this._selectThumbnail(thumbnail);
    },
    
    _selectThumbnail: function js_com_cs_v2_UI_Images_MediaGallery$_selectThumbnail(thumb) {
        /// <param name="thumb" type="js.com.cs.v2.UI.Images.GalleryThumbnail">
        /// </param>
        var itemDetails = thumb.itemDetails;
        this._clearContainer();
        if (itemDetails.largeURL != null && (itemDetails.largeURL.lastIndexOf('.flv') + 4 === itemDetails.largeURL.length)) {
            var id = this._mainItemContainer.get_id() + '_' + thumb.index + '_flvPlayer';
            var flvPlayer = new js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject(id, itemDetails.largeURL, null, null, true);
            this._currShownMainItem = flvPlayer.div;
            this._mainItemContainer.appendChild(this._currShownMainItem);
        }
        else {
            var img = new js.com.cs.v2.Controls.Common.MyImageElement();
            img.set_src(itemDetails.normalURL);
            this._currShownMainItem = img;
            this._mainItemContainer.appendChild(img);
        }
        js.com.cs.v2.UI.Images.ImagesGeneralUtil._changeCaption(this._elemCaption, itemDetails.caption, true, 0);
    },
    
    initThumbs: function js_com_cs_v2_UI_Images_MediaGallery$initThumbs(items, elemThumbs) {
        /// <param name="items" type="Array" elementType="MediaItem">
        /// </param>
        /// <param name="elemThumbs" type="Array" elementType="MyImageElement">
        /// </param>
        this._thumbnails = [];
        for (var i = 0; i < items.length; i++) {
            var mediaItem = items[i];
            var imgThumb = elemThumbs[i];
            var thumb = new js.com.cs.v2.UI.Images.GalleryThumbnail(i, imgThumb, mediaItem, this.csS_ThumbnailUp, this.csS_ThumbnailOver, this.csS_ThumbnailSelected, this.attachCSSToParent);
            this._thumbnails[this._thumbnails.length] = thumb;
            thumb.add_onClick(Delegate.create(this, this._thumbnailClick));
        }
    },
    
    init: function js_com_cs_v2_UI_Images_MediaGallery$init(items, mainItemContainerID, elemThumbs, addToDOM, startIndex, elemCaptionID) {
        /// <param name="items" type="Array" elementType="MediaItem">
        /// </param>
        /// <param name="mainItemContainerID" type="String">
        /// </param>
        /// <param name="elemThumbs" type="Array" elementType="MyImageElement">
        /// </param>
        /// <param name="addToDOM" type="Boolean">
        /// </param>
        /// <param name="startIndex" type="Number" integer="true">
        /// </param>
        /// <param name="elemCaptionID" type="String">
        /// </param>
        this._mainItemContainer = new js.com.cs.v2.Controls.Common.MyDOMElement(mainItemContainerID);
        this._elemCaption = new js.com.cs.v2.Controls.Common.MyDOMElement(elemCaptionID);
        this.initThumbs(items, elemThumbs);
        if (this._thumbnails[startIndex] != null) {
            this._selectThumbnail(this._thumbnails[startIndex]);
        }
    },
    
    toString: function js_com_cs_v2_UI_Images_MediaGallery$toString() {
        /// <returns type="String"></returns>
        return 'js.com.cs.v2.UI.Images.MediaGallery';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.GalleryThumbnail

js.com.cs.v2.UI.Images.GalleryThumbnail = function js_com_cs_v2_UI_Images_GalleryThumbnail(index, imgID, itemDetails, CSS_Up, CSS_Over, CSS_Selected, attachCSSToParent) {
    /// <param name="index" type="Number" integer="true">
    /// </param>
    /// <param name="imgID" type="String">
    /// </param>
    /// <param name="itemDetails" type="js.com.cs.v2.UI.Images.MediaItem">
    /// </param>
    /// <param name="CSS_Up" type="String">
    /// </param>
    /// <param name="CSS_Over" type="String">
    /// </param>
    /// <param name="CSS_Selected" type="String">
    /// </param>
    /// <param name="attachCSSToParent" type="Boolean">
    /// </param>
    /// <field name="_cssUp" type="String">
    /// </field>
    /// <field name="_cssOver" type="String">
    /// </field>
    /// <field name="_cssSelected" type="String">
    /// </field>
    /// <field name="_attachCSSToParent" type="Boolean">
    /// </field>
    /// <field name="_selected" type="Boolean">
    /// </field>
    /// <field name="img" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="index" type="Number" integer="true">
    /// </field>
    /// <field name="itemDetails" type="js.com.cs.v2.UI.Images.MediaItem">
    /// </field>
    /// <field name="__onClick" type="js.com.cs.v2.UI.Images.GalleryThumbnailClickHandler">
    /// </field>
    this.index = index;
    if (Type.canCast(imgID, String)) {
        this.img = new js.com.cs.v2.Controls.Common.MyImageElement(imgID);
    }
    else if (Type.canCast(imgID, js.com.cs.v2.Controls.Common.MyImageElement)) {
        this.img = imgID;
    }
    else {
        throw new Error('GalleryThumbnail: Error - This must be either string or MyImageElement');
    }
    this.itemDetails = itemDetails;
    this._cssUp = CSS_Up;
    this._cssOver = CSS_Over;
    this._cssSelected = CSS_Selected;
    this._attachCSSToParent = attachCSSToParent;
    this._init();
}
js.com.cs.v2.UI.Images.GalleryThumbnail.prototype = {
    _cssUp: null,
    _cssOver: null,
    _cssSelected: null,
    _attachCSSToParent: false,
    _selected: false,
    img: null,
    index: 0,
    itemDetails: null,
    
    add_onClick: function js_com_cs_v2_UI_Images_GalleryThumbnail$add_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick = Delegate.combine(this.__onClick, value);
    },
    remove_onClick: function js_com_cs_v2_UI_Images_GalleryThumbnail$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick = Delegate.remove(this.__onClick, value);
    },
    
    __onClick: null,
    
    _getCSSElement: function js_com_cs_v2_UI_Images_GalleryThumbnail$_getCSSElement() {
        /// <returns type="js.com.cs.v2.Controls.Common.MyDOMElement"></returns>
        if (this._attachCSSToParent) {
            return this.img.get_parent();
        }
        else {
            return this.img;
        }
    },
    
    _removeCSSClasses: function js_com_cs_v2_UI_Images_GalleryThumbnail$_removeCSSClasses() {
        this._getCSSElement().removeClass(this._cssUp, this._cssSelected, this._cssOver);
    },
    
    _over: function js_com_cs_v2_UI_Images_GalleryThumbnail$_over(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._removeCSSClasses();
        if (this._selected) {
            this._getCSSElement().addClass(this._cssOver);
        }
    },
    
    _up: function js_com_cs_v2_UI_Images_GalleryThumbnail$_up(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._removeCSSClasses();
        if (!this._selected) {
            this._getCSSElement().addClass(this._cssUp);
        }
    },
    
    _click: function js_com_cs_v2_UI_Images_GalleryThumbnail$_click(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onClick != null) {
            this.__onClick.invoke(this);
        }
    },
    
    select: function js_com_cs_v2_UI_Images_GalleryThumbnail$select() {
        if (!this._selected) {
            this._selected = true;
            this._removeCSSClasses();
            this._getCSSElement().addClass(this._cssSelected);
        }
    },
    
    unSelect: function js_com_cs_v2_UI_Images_GalleryThumbnail$unSelect() {
        if (this._selected) {
            this._selected = false;
            this._up(null);
        }
    },
    
    _initHandlers: function js_com_cs_v2_UI_Images_GalleryThumbnail$_initHandlers() {
        this._getCSSElement().add_onMouseOver(Delegate.create(this, this._over));
        this._getCSSElement().add_onMouseOut(Delegate.create(this, this._up));
        this._getCSSElement().add_onClick(Delegate.create(this, this._click));
        this._up(null);
    },
    
    _init: function js_com_cs_v2_UI_Images_GalleryThumbnail$_init() {
        this._initHandlers();
    },
    
    toString: function js_com_cs_v2_UI_Images_GalleryThumbnail$toString() {
        /// <returns type="String"></returns>
        return 'js.com.cs.v2.UI.Images.Gallery.Thumbnail';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.SlideShow

js.com.cs.v2.UI.Images.SlideShow = function js_com_cs_v2_UI_Images_SlideShow() {
    /// <field name="onImageChanged" type="js.com.cs.v2.UI.Images.OnImageChangedHandler">
    /// </field>
    /// <field name="_index" type="Number" integer="true">
    /// </field>
    /// <field name="_imagesPreloader" type="js.com.cs.v2.UI.Images.ImagesPreloader">
    /// </field>
    /// <field name="_imgTag" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_intervalID" type="Number" integer="true">
    /// </field>
    /// <field name="_stopped" type="Boolean">
    /// </field>
    /// <field name="_captions" type="Array" elementType="String">
    /// </field>
    /// <field name="_elemCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="delay" type="Number" integer="true">
    /// </field>
    /// <field name="useJQuery" type="Boolean">
    /// </field>
    /// <field name="defaultDuration" type="Number" integer="true">
    /// </field>
    this._imagesPreloader = new js.com.cs.v2.UI.Images.ImagesPreloader();
    this.onImageChanged = null;
}
js.com.cs.v2.UI.Images.SlideShow.prototype = {
    onImageChanged: null,
    _index: 0,
    _imgTag: null,
    _intervalID: 0,
    _stopped: true,
    _captions: null,
    _elemCaption: null,
    delay: 0,
    useJQuery: true,
    defaultDuration: 500,
    
    _delayAndShowNext: function js_com_cs_v2_UI_Images_SlideShow$_delayAndShowNext() {
        window.clearTimeout(this._intervalID);
        this._intervalID = window.setTimeout(Delegate.create(this, this._callNextWithDefParams), this.delay);
    },
    
    _callNextWithDefParams: function js_com_cs_v2_UI_Images_SlideShow$_callNextWithDefParams() {
        this.nextImage(true);
    },
    
    _init: function js_com_cs_v2_UI_Images_SlideShow$_init(img, caption) {
        /// <param name="img" type="js.com.cs.v2.Controls.Common.MyImageElement">
        /// </param>
        /// <param name="caption" type="String">
        /// </param>
        img.add_onLoad(Delegate.create(this, this._init_img_onLoad));
        img.add_onError(Delegate.create(this, this._init_img_onError));
        if (this._elemCaption != null) {
            this._elemCaption.set_innerHTML(caption);
        }
    },
    
    _init_img_onLoad: function js_com_cs_v2_UI_Images_SlideShow$_init_img_onLoad(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var img = e.data;
        this._delayAndShowNext();
        img.remove_onLoad(Delegate.create(this, this._init_img_onLoad));
        img.remove_onError(Delegate.create(this, this._init_img_onError));
    },
    
    _init_img_onError: function js_com_cs_v2_UI_Images_SlideShow$_init_img_onError(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var img = e.data;
        this._delayAndShowNext();
        img.remove_onLoad(Delegate.create(this, this._init_img_onLoad));
        img.remove_onError(Delegate.create(this, this._init_img_onError));
    },
    
    showImages: function js_com_cs_v2_UI_Images_SlideShow$showImages(images, elemImage, addToDOM, startIndex, delay, elemCaption, captions) {
        /// <param name="images" type="Array" elementType="String">
        /// </param>
        /// <param name="elemImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
        /// </param>
        /// <param name="addToDOM" type="Boolean">
        /// </param>
        /// <param name="startIndex" type="Number" integer="true">
        /// </param>
        /// <param name="delay" type="Number" integer="true">
        /// </param>
        /// <param name="elemCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
        /// </param>
        /// <param name="captions" type="Array" elementType="String">
        /// </param>
        var img = elemImage;
        this._elemCaption = elemCaption;
        this._imgTag = img;
        this._index = startIndex;
        this.delay = delay;
        this._stopped = false;
        this._imagesPreloader.preloadImages(images, elemImage, addToDOM, startIndex);
        this._captions = captions;
        var caption = '';
        if (captions != null) {
            caption = captions[startIndex];
        }
        this._init(img, caption);
    },
    
    changeImage: function js_com_cs_v2_UI_Images_SlideShow$changeImage(index, fromSlideshow) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="fromSlideshow" type="Boolean">
        /// </param>
        var img = this._imagesPreloader.getImageByIndex(index);
        var caption = '';
        if (this._captions != null) {
            caption = this._captions[index];
        }
        if (img == null) {
            var tmpImageLoadedClass = new js.com.cs.v2.UI.Images.HelperClasses.OnImageLoadedHandlerClass(this, index, fromSlideshow);
            this._imagesPreloader.add_onImageLoaded(Delegate.create(tmpImageLoadedClass, tmpImageLoadedClass.onImageLoaded));
            this._imagesPreloader.skipLoadingTo(index);
        }
        else {
            var tmpClass = new js.com.cs.v2.UI.Images.HelperClasses.OnReadyChangingImageClass(this, img, fromSlideshow);
            js.com.cs.v2.UI.Images.ImagesGeneralUtil._changeImage(this._imagesPreloader.addToDOM, this._imgTag, img, this._elemCaption, caption, this.onImageChanged, this.useJQuery, this.defaultDuration, Delegate.create(tmpClass, tmpClass.onReadyChangingImage), null);
        }
    },
    
    nextImage: function js_com_cs_v2_UI_Images_SlideShow$nextImage(fromSlideShow) {
        /// <param name="fromSlideShow" type="Boolean">
        /// </param>
        this._index++;
        if (this._index === this._imagesPreloader._images.length) {
            this._index = 0;
        }
        this.changeImage(this._index, fromSlideShow);
    },
    
    prevImage: function js_com_cs_v2_UI_Images_SlideShow$prevImage(fromSlideShow) {
        /// <param name="fromSlideShow" type="Boolean">
        /// </param>
        this._index--;
        if (this._index === -1) {
            this._index = this._imagesPreloader._images.length - 1;
        }
        this.changeImage(this._index, fromSlideShow);
    },
    
    stop: function js_com_cs_v2_UI_Images_SlideShow$stop() {
        if (!this._stopped) {
            window.clearTimeout(this._intervalID);
            this._stopped = true;
        }
    },
    
    play: function js_com_cs_v2_UI_Images_SlideShow$play() {
        if (this._stopped) {
            this._stopped = false;
            window.clearTimeout(this._intervalID);
            this._delayAndShowNext();
        }
    },
    
    toString: function js_com_cs_v2_UI_Images_SlideShow$toString() {
        /// <returns type="String"></returns>
        return 'js.com.cs.v2.UI.Images.SlideShow';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.ImagesPreloader

js.com.cs.v2.UI.Images.ImagesPreloader = function js_com_cs_v2_UI_Images_ImagesPreloader() {
    /// <field name="_images" type="Array" elementType="String">
    /// </field>
    /// <field name="addToDOM" type="Boolean">
    /// </field>
    /// <field name="_index" type="Number" integer="true">
    /// </field>
    /// <field name="_holder" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_imgProperties" type="Object">
    /// </field>
    /// <field name="_loadingImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_loadingIndex" type="Number" integer="true">
    /// </field>
    /// <field name="_loadedImages" type="Array" elementType="String">
    /// </field>
    /// <field name="_errorImages" type="Array" elementType="String">
    /// </field>
    /// <field name="_imgs" type="Array" elementType="MyImageElement">
    /// </field>
    /// <field name="__onImageLoaded" type="js.com.cs.v2.UI.Images.OnImageLoadedHandler">
    /// </field>
    this._imgs = [];
    this._loadedImages = [];
    this._errorImages = [];
    this._loadNextImage();
}
js.com.cs.v2.UI.Images.ImagesPreloader.prototype = {
    _images: null,
    addToDOM: false,
    _index: 0,
    _holder: null,
    _imgProperties: null,
    _loadingImage: null,
    _loadingIndex: 0,
    _loadedImages: null,
    _errorImages: null,
    _imgs: null,
    
    add_onImageLoaded: function js_com_cs_v2_UI_Images_ImagesPreloader$add_onImageLoaded(value) {
        /// <param name="value" type="Function" />
        this.__onImageLoaded = Delegate.combine(this.__onImageLoaded, value);
    },
    remove_onImageLoaded: function js_com_cs_v2_UI_Images_ImagesPreloader$remove_onImageLoaded(value) {
        /// <param name="value" type="Function" />
        this.__onImageLoaded = Delegate.remove(this.__onImageLoaded, value);
    },
    
    __onImageLoaded: null,
    
    _getElemIndexInArray: function js_com_cs_v2_UI_Images_ImagesPreloader$_getElemIndexInArray(a, elem) {
        /// <param name="a" type="Array">
        /// </param>
        /// <param name="elem" type="Object">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        for (var i = 0; i < a.length; i++) {
            if (a[i] === elem) {
                return i;
            }
        }
        return -1;
    },
    
    preloadImages: function js_com_cs_v2_UI_Images_ImagesPreloader$preloadImages(images, imgElem, addToDOM, startIndex) {
        /// <param name="images" type="Array" elementType="String">
        /// </param>
        /// <param name="imgElem" type="js.com.cs.v2.Controls.Common.MyImageElement">
        /// </param>
        /// <param name="addToDOM" type="Boolean">
        /// </param>
        /// <param name="startIndex" type="Number" integer="true">
        /// </param>
        this._images = images;
        this._imgs = [];
        this._loadedImages = [];
        this._errorImages = [];
        if (imgElem != null) {
            this._holder = imgElem.get_parent();
            this._imgProperties = {};
            var img = imgElem;
            var $dict1 = imgElem;
            for (var $key2 in $dict1) {
                var x = { key: $key2, value: $dict1[$key2] };
                switch (x.key.toLowerCase()) {
                    case 'onload':
                    case 'onerror':
                        continue;
                        break;
                }
                if (x.key.indexOf('on') === 0) {
                    this._imgProperties[x.key] = x.value;
                }
            }
            this._imgs[startIndex] = img;
            img.add_onLoad(Delegate.create(this, this._preloadImages_img_onLoad));
            img.add_onError(Delegate.create(this, this._preloadImages_img_onError));
            img.set_src(images[0]);
        }
    },
    
    _preloadImages_img_onError: function js_com_cs_v2_UI_Images_ImagesPreloader$_preloadImages_img_onError(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var img = e.data;
        this._errorImages[this._errorImages.length] = img.get_src();
        if (this.__onImageLoaded != null) {
            this.__onImageLoaded.invoke(0, img.get_src(), true);
        }
        img.remove_onError(Delegate.create(this, this._preloadImages_img_onError));
    },
    
    _preloadImages_img_onLoad: function js_com_cs_v2_UI_Images_ImagesPreloader$_preloadImages_img_onLoad(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var img = e.data;
        this._loadedImages[this._loadedImages.length] = img.get_src();
        if (this.__onImageLoaded != null) {
            this.__onImageLoaded.invoke(0, img.get_src(), true);
        }
        img.remove_onLoad(Delegate.create(this, this._preloadImages_img_onLoad));
    },
    
    _loadImage: function js_com_cs_v2_UI_Images_ImagesPreloader$_loadImage(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var imageURL = this._images[index];
        var img = new js.com.cs.v2.Controls.Common.MyImageElement();
        this._loadingImage = img;
        this._loadingIndex = index;
        img.add_onLoad(Delegate.create(this, this._loadImage_img_onLoad));
        img.add_onError(Delegate.create(this, this._loadImage_img_onError));
        if (this.addToDOM) {
            img.get_style().display = 'none';
            this._imgs[index] = img;
            js.com.cs.v2.Util.GeneralUtil.copyPropertiesFromToObject(this._imgProperties, img);
            this._holder.appendChild(img);
        }
        img.set_src(imageURL);
    },
    
    _loadImage_img_onError: function js_com_cs_v2_UI_Images_ImagesPreloader$_loadImage_img_onError(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var img = this._loadingImage;
        this._loadedImages[this._loadedImages.length] = img.get_src();
        this._loadNextImage();
        if (this.__onImageLoaded != null) {
            this.__onImageLoaded.invoke(this._loadingIndex, img.get_src(), false);
        }
        img.remove_onLoad(Delegate.create(this, this._loadImage_img_onLoad));
        img.remove_onError(Delegate.create(this, this._loadImage_img_onError));
        this._loadingIndex = 0;
    },
    
    _loadImage_img_onLoad: function js_com_cs_v2_UI_Images_ImagesPreloader$_loadImage_img_onLoad(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var img = this._loadingImage;
        this._loadedImages[this._loadedImages.length] = img.get_src();
        this._loadNextImage();
        if (this.__onImageLoaded != null) {
            this.__onImageLoaded.invoke(this._loadingIndex, img.get_src(), false);
        }
        img.remove_onLoad(Delegate.create(this, this._loadImage_img_onLoad));
        img.remove_onError(Delegate.create(this, this._loadImage_img_onError));
        this._loadingIndex = 0;
    },
    
    skipLoadingTo: function js_com_cs_v2_UI_Images_ImagesPreloader$skipLoadingTo(imageIndex) {
        /// <param name="imageIndex" type="Number" integer="true">
        /// </param>
        if (imageIndex === this._loadingIndex) {
            return;
        }
        if (this._loadingImage != null) {
            this._loadingImage = null;
        }
        this._index = imageIndex;
        this._loadImage(imageIndex);
    },
    
    _loadNextImage: function js_com_cs_v2_UI_Images_ImagesPreloader$_loadNextImage() {
        /// <summary>
        /// Load the next unloaded image
        /// </summary>
        var a1 = this._loadedImages;
        for (var i = 0; i < this._images.length; i++) {
            this._index++;
            if (this._index === this._images.length) {
                this._index = 0;
            }
            var imgURL = this._images[this._index];
            if (this._getElemIndexInArray(this._loadedImages, imgURL) === -1 && this._getElemIndexInArray(this._errorImages, imgURL) === -1) {
                this._loadImage(this._index);
            }
        }
    },
    
    getImageByIndex: function js_com_cs_v2_UI_Images_ImagesPreloader$getImageByIndex(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyImageElement"></returns>
        return this._getImageByIndexOrURL(index, null);
    },
    
    getImageByUrl: function js_com_cs_v2_UI_Images_ImagesPreloader$getImageByUrl(imageURL) {
        /// <param name="imageURL" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyImageElement"></returns>
        return this._getImageByIndexOrURL(0, imageURL);
    },
    
    _getImageByIndexOrURL: function js_com_cs_v2_UI_Images_ImagesPreloader$_getImageByIndexOrURL(index, imageURL) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="imageURL" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyImageElement"></returns>
        if (imageURL == null) {
            imageURL = this._images[index];
        }
        if (this._getElemIndexInArray(this._loadedImages, imageURL) !== -1 || this._getElemIndexInArray(this._errorImages, imageURL) !== -1) {
            if (this.addToDOM) {
                var imageIndex = this._getElemIndexInArray(this._images, imageURL);
                return this._imgs[imageIndex];
            }
            else {
                throw new Error('This cannot happen due to Script# limitations.  Cannot return either image or string');
            }
        }
        return null;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.Images

js.com.cs.v2.UI.Images.Images = function js_com_cs_v2_UI_Images_Images() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.MediaItem

js.com.cs.v2.UI.Images.MediaItem = function js_com_cs_v2_UI_Images_MediaItem(thumbURL, normalURL, largeURL, caption) {
    /// <param name="thumbURL" type="String">
    /// </param>
    /// <param name="normalURL" type="String">
    /// </param>
    /// <param name="largeURL" type="String">
    /// </param>
    /// <param name="caption" type="String">
    /// </param>
    /// <field name="thumbURL" type="String">
    /// </field>
    /// <field name="normalURL" type="String">
    /// </field>
    /// <field name="largeURL" type="String">
    /// </field>
    /// <field name="caption" type="String">
    /// </field>
    this.thumbURL = thumbURL;
    this.normalURL = normalURL;
    this.largeURL = largeURL;
    this.caption = caption;
}
js.com.cs.v2.UI.Images.MediaItem.prototype = {
    thumbURL: null,
    normalURL: null,
    largeURL: null,
    caption: null,
    
    toString: function js_com_cs_v2_UI_Images_MediaItem$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.images.Image]';
    }
}


Type.createNamespace('js.com.cs.v2.UI.Images.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.v1.ImageSlideshow

js.com.cs.v2.UI.Images.v1.ImageSlideshow = function js_com_cs_v2_UI_Images_v1_ImageSlideshow(images, imgTagID, fadeDurationMS, randomize) {
    /// <summary>
    /// When creating the slideshow, the parent of the image becomes 'relative' position and images 'absolute'
    /// </summary>
    /// <param name="images" type="Array" elementType="ImageSlideshowData">
    /// </param>
    /// <param name="imgTagID" type="String">
    /// </param>
    /// <param name="fadeDurationMS" type="Number" integer="true">
    /// </param>
    /// <param name="randomize" type="Boolean">
    /// </param>
    /// <field name="_img" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_newImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_images" type="Array" elementType="ImageSlideshowData">
    /// </field>
    /// <field name="_randomize" type="Boolean">
    /// </field>
    /// <field name="_fadeDurationMS" type="Number" integer="true">
    /// </field>
    /// <field name="_currIndex" type="Number" integer="true">
    /// </field>
    if (isNullOrUndefined(fadeDurationMS)) {
        fadeDurationMS = 500;
    }
    this._fadeDurationMS = fadeDurationMS;
    this._img = new js.com.cs.v2.Controls.Common.MyImageElement(imgTagID);
    this._randomize = randomize;
    if (this._randomize) {
        images = js.com.cs.v2.Util.ArrayUtil.randomizeArray(images);
    }
    this._images = images;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.Images.v1.ImageSlideshow.prototype = {
    _img: null,
    _newImage: null,
    _parent: null,
    _images: null,
    _randomize: false,
    _fadeDurationMS: 0,
    _currIndex: 0,
    
    _nextImage: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_nextImage() {
        this._currIndex++;
        if (this._currIndex === this._images.length) {
            this._currIndex = 0;
        }
        var imgData = this._images[this._currIndex];
        var newImage = this._getImage(imgData);
        newImage.add_onLoad(Delegate.create(this, this._newImage_onLoad));
    },
    
    _newImage_onLoad: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_newImage_onLoad(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var newImage = e.data;
        this._showNewImage(newImage);
    },
    
    _newImageShown: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_newImageShown() {
        if (this._img.get_parent() != null) {
            this._img.get_parent().removeChild(this._img);
        }
        this._img = this._newImage;
        this._newImage = null;
        this._delayAndNextImage();
    },
    
    _showNewImage: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_showNewImage(newImage) {
        /// <param name="newImage" type="js.com.cs.v2.Controls.Common.MyImageElement">
        /// </param>
        this._newImage = newImage;
        this._parent.appendChild(newImage);
        newImage.hide();
        newImage.get_jQueryElement().fadeIn(this._fadeDurationMS, Delegate.create(this, this._newImageShown));
        newImage.remove_onLoad(Delegate.create(this, this._newImage_onLoad));
    },
    
    _delayAndNextImage: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_delayAndNextImage() {
        var imgData = this._images[this._currIndex];
        window.setTimeout(Delegate.create(this, this._nextImage), imgData.durationMS);
    },
    
    _getImage: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_getImage(data) {
        /// <param name="data" type="js.com.cs.v2.UI.Images.v1.ImageSlideshowData">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyImageElement"></returns>
        var img = new js.com.cs.v2.Controls.Common.MyImageElement();
        img.set_src(data.image);
        img.set_alt(data.title);
        img.get_style().position = 'absolute';
        img.get_style().left = '0px';
        img.get_style().top = '0px';
        return img;
    },
    
    _initContainer: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_initContainer() {
        this._parent = this._img.get_parent();
        this._parent.get_style().position = 'relative';
        this._img.get_style().position = 'absolute';
        this._img.get_style().left = '0px';
        this._img.get_style().top = '0px';
    },
    
    _init: function js_com_cs_v2_UI_Images_v1_ImageSlideshow$_init() {
        this._initContainer();
        this._delayAndNextImage();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Images.v1.ImageSlideshowData

js.com.cs.v2.UI.Images.v1.ImageSlideshowData = function js_com_cs_v2_UI_Images_v1_ImageSlideshowData() {
    /// <field name="title" type="String">
    /// </field>
    /// <field name="image" type="String">
    /// </field>
    /// <field name="durationMS" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.Images.v1.ImageSlideshowData.prototype = {
    title: null,
    image: null,
    durationMS: 0
}


Type.createNamespace('js.com.cs.v2.UI.JQuery');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.JQueryDialog

js.com.cs.v2.UI.JQuery.JQueryDialog = function js_com_cs_v2_UI_JQuery_JQueryDialog(elem) {
    /// <param name="elem" type="jQuery">
    /// </param>
    /// <field name="_elem" type="jQuery">
    /// </field>
    /// <field name="_closeable" type="Boolean">
    /// </field>
    /// <field name="__onBeforeClose" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onOpen" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onFocus" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onDragStart" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onDrag" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onDragStop" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onResizeStart" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onResize" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onResizeStop" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onClose" type="js.com.cs.v2.UI.JQuery.JQueryDialogEvent">
    /// </field>
    this._elem = elem;
    var opts = {};
    opts.minHeight = opts.minWidth = 0;
    opts.beforeclose = Delegate.create(this, this._beforeClose);
    opts.open = Delegate.create(this, this._open);
    opts.focus = Delegate.create(this, this._focus);
    opts.dragStart = Delegate.create(this, this._dragStart);
    opts.drag = Delegate.create(this, this._drag);
    opts.dragStop = Delegate.create(this, this._dragStop);
    opts.resizeStart = Delegate.create(this, this._resizeStart);
    opts.resize = Delegate.create(this, this._resize);
    opts.resizeStop = Delegate.create(this, this._resizeStop);
    opts.close = Delegate.create(this, this._close);
    opts.bgiframe = true;
    opts.autoOpen = false;
    this._elem.dialog(opts);
    this.set_showEffect(this.set_hideEffect(js.com.JQueryScriptSharp.JQUERY_UI_EFFECT.blind));
}
js.com.cs.v2.UI.JQuery.JQueryDialog.prototype = {
    _elem: null,
    _closeable: false,
    
    add_onBeforeClose: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onBeforeClose(value) {
        /// <param name="value" type="Function" />
        this.__onBeforeClose = Delegate.combine(this.__onBeforeClose, value);
    },
    remove_onBeforeClose: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onBeforeClose(value) {
        /// <param name="value" type="Function" />
        this.__onBeforeClose = Delegate.remove(this.__onBeforeClose, value);
    },
    
    __onBeforeClose: null,
    
    add_onOpen: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onOpen(value) {
        /// <param name="value" type="Function" />
        this.__onOpen = Delegate.combine(this.__onOpen, value);
    },
    remove_onOpen: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onOpen(value) {
        /// <param name="value" type="Function" />
        this.__onOpen = Delegate.remove(this.__onOpen, value);
    },
    
    __onOpen: null,
    
    add_onFocus: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onFocus(value) {
        /// <param name="value" type="Function" />
        this.__onFocus = Delegate.combine(this.__onFocus, value);
    },
    remove_onFocus: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onFocus(value) {
        /// <param name="value" type="Function" />
        this.__onFocus = Delegate.remove(this.__onFocus, value);
    },
    
    __onFocus: null,
    
    add_onDragStart: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onDragStart(value) {
        /// <param name="value" type="Function" />
        this.__onDragStart = Delegate.combine(this.__onDragStart, value);
    },
    remove_onDragStart: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onDragStart(value) {
        /// <param name="value" type="Function" />
        this.__onDragStart = Delegate.remove(this.__onDragStart, value);
    },
    
    __onDragStart: null,
    
    add_onDrag: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onDrag(value) {
        /// <param name="value" type="Function" />
        this.__onDrag = Delegate.combine(this.__onDrag, value);
    },
    remove_onDrag: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onDrag(value) {
        /// <param name="value" type="Function" />
        this.__onDrag = Delegate.remove(this.__onDrag, value);
    },
    
    __onDrag: null,
    
    add_onDragStop: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onDragStop(value) {
        /// <param name="value" type="Function" />
        this.__onDragStop = Delegate.combine(this.__onDragStop, value);
    },
    remove_onDragStop: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onDragStop(value) {
        /// <param name="value" type="Function" />
        this.__onDragStop = Delegate.remove(this.__onDragStop, value);
    },
    
    __onDragStop: null,
    
    add_onResizeStart: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onResizeStart(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStart = Delegate.combine(this.__onResizeStart, value);
    },
    remove_onResizeStart: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onResizeStart(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStart = Delegate.remove(this.__onResizeStart, value);
    },
    
    __onResizeStart: null,
    
    add_onResize: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onResize(value) {
        /// <param name="value" type="Function" />
        this.__onResize = Delegate.combine(this.__onResize, value);
    },
    remove_onResize: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onResize(value) {
        /// <param name="value" type="Function" />
        this.__onResize = Delegate.remove(this.__onResize, value);
    },
    
    __onResize: null,
    
    add_onResizeStop: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onResizeStop(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStop = Delegate.combine(this.__onResizeStop, value);
    },
    remove_onResizeStop: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onResizeStop(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStop = Delegate.remove(this.__onResizeStop, value);
    },
    
    __onResizeStop: null,
    
    add_onClose: function js_com_cs_v2_UI_JQuery_JQueryDialog$add_onClose(value) {
        /// <param name="value" type="Function" />
        this.__onClose = Delegate.combine(this.__onClose, value);
    },
    remove_onClose: function js_com_cs_v2_UI_JQuery_JQueryDialog$remove_onClose(value) {
        /// <param name="value" type="Function" />
        this.__onClose = Delegate.remove(this.__onClose, value);
    },
    
    __onClose: null,
    
    get_element: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_element() {
        /// <value type="jQuery"></value>
        return this._elem;
    },
    
    _beforeClose: function js_com_cs_v2_UI_JQuery_JQueryDialog$_beforeClose(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onBeforeClose != null) {
            this.__onBeforeClose.invoke(this);
        }
    },
    
    _open: function js_com_cs_v2_UI_JQuery_JQueryDialog$_open(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.get_closeable()) {
            js.com.JQueryScriptSharp.jQueryUtil.select('.ui-dialog-titlebar-close').show();
        }
        else {
            js.com.JQueryScriptSharp.jQueryUtil.select('.ui-dialog-titlebar-close').hide();
        }
        if (this.__onOpen != null) {
            this.__onOpen.invoke(this);
        }
    },
    
    _focus: function js_com_cs_v2_UI_JQuery_JQueryDialog$_focus(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onFocus != null) {
            this.__onFocus.invoke(this);
        }
    },
    
    _dragStart: function js_com_cs_v2_UI_JQuery_JQueryDialog$_dragStart(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onDragStart != null) {
            this.__onDragStart.invoke(this);
        }
    },
    
    _drag: function js_com_cs_v2_UI_JQuery_JQueryDialog$_drag(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onDrag != null) {
            this.__onDrag.invoke(this);
        }
    },
    
    _dragStop: function js_com_cs_v2_UI_JQuery_JQueryDialog$_dragStop(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onDragStop != null) {
            this.__onDragStop.invoke(this);
        }
    },
    
    _resizeStart: function js_com_cs_v2_UI_JQuery_JQueryDialog$_resizeStart(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onResizeStart != null) {
            this.__onResizeStart.invoke(this);
        }
    },
    
    _resize: function js_com_cs_v2_UI_JQuery_JQueryDialog$_resize(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onResize != null) {
            this.__onResize.invoke(this);
        }
    },
    
    _resizeStop: function js_com_cs_v2_UI_JQuery_JQueryDialog$_resizeStop(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onResizeStop != null) {
            this.__onResizeStop.invoke(this);
        }
    },
    
    _close: function js_com_cs_v2_UI_JQuery_JQueryDialog$_close(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this.__onClose != null) {
            this.__onClose.invoke(this);
        }
    },
    
    _triggerClose: function js_com_cs_v2_UI_JQuery_JQueryDialog$_triggerClose() {
        /// <summary>
        /// Trigger the close event
        /// </summary>
        this.close();
    },
    
    setOkButton: function js_com_cs_v2_UI_JQuery_JQueryDialog$setOkButton(btnText) {
        /// <param name="btnText" type="String">
        /// </param>
        if (String.isNullOrEmpty(btnText)) {
            btnText = 'Ok';
        }
        var buttons = {};
        buttons[btnText] = Delegate.create(this, this._triggerClose);
        this.setButtons(buttons);
    },
    
    setYesNoButtons: function js_com_cs_v2_UI_JQuery_JQueryDialog$setYesNoButtons(btnYesText, btnYesHandler, btnNoText) {
        /// <summary>
        /// Set yes / no buttons
        /// </summary>
        /// <param name="btnYesText" type="String">
        /// </param>
        /// <param name="btnYesHandler" type="Callback">
        /// </param>
        /// <param name="btnNoText" type="String">
        /// The no button will close the dialog
        /// </param>
        var buttons = {};
        buttons[btnYesText] = btnYesHandler;
        buttons[btnNoText] = Delegate.create(this, this._triggerClose);
        this.setButtons(buttons);
    },
    
    _getOption: function js_com_cs_v2_UI_JQuery_JQueryDialog$_getOption(optionName) {
        /// <param name="optionName" type="String">
        /// </param>
        /// <returns type="Object"></returns>
        return this._elem.dialog('option', optionName);
    },
    
    _setOption: function js_com_cs_v2_UI_JQuery_JQueryDialog$_setOption(optionName, value) {
        /// <param name="optionName" type="String">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        this._elem.dialog('option', optionName, value);
    },
    
    get_resizable: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_resizable() {
        /// <value type="Boolean"></value>
        return this._getOption('resizable');
    },
    set_resizable: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_resizable(value) {
        /// <value type="Boolean"></value>
        this._setOption('resizable', value);
        return value;
    },
    
    get_autoOpen: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_autoOpen() {
        /// <value type="Boolean"></value>
        return this._getOption('autoOpen');
    },
    set_autoOpen: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_autoOpen(value) {
        /// <value type="Boolean"></value>
        this._setOption('autoOpen', value);
        return value;
    },
    
    get_bgiframe: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_bgiframe() {
        /// <value type="Boolean"></value>
        return this._getOption('bgiframe');
    },
    set_bgiframe: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_bgiframe(value) {
        /// <value type="Boolean"></value>
        this._setOption('bgiframe', value);
        return value;
    },
    
    get_getButtons: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_getButtons() {
        /// <value type="Object"></value>
        return this._getOption('buttons');
    },
    
    setButtons: function js_com_cs_v2_UI_JQuery_JQueryDialog$setButtons(buttons) {
        /// <param name="buttons" type="Object">
        /// The key is the label, the value is the callback
        /// </param>
        this._setOption('buttons', buttons);
    },
    
    get_dialogClass: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_dialogClass() {
        /// <value type="String"></value>
        return this._getOption('dialogClass');
    },
    set_dialogClass: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_dialogClass(value) {
        /// <value type="String"></value>
        this._setOption('dialogClass', value);
        return value;
    },
    
    get_closeText: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_closeText() {
        /// <value type="String"></value>
        return this._getOption('closeText');
    },
    set_closeText: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_closeText(value) {
        /// <value type="String"></value>
        this._setOption('closeText', value);
        return value;
    },
    
    get_closeOnEscape: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_closeOnEscape() {
        /// <value type="Boolean"></value>
        return this._getOption('closeOnEscape');
    },
    set_closeOnEscape: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_closeOnEscape(value) {
        /// <value type="Boolean"></value>
        this._setOption('closeOnEscape', value);
        return value;
    },
    
    get_closeable: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_closeable() {
        /// <value type="Boolean"></value>
        return this._closeable;
    },
    set_closeable: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_closeable(value) {
        /// <value type="Boolean"></value>
        this._closeable = value;
        if (!value) {
            this.set_closeOnEscape(value);
        }
        return value;
    },
    
    get_draggable: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_draggable() {
        /// <value type="Boolean"></value>
        return this._getOption('draggable');
    },
    set_draggable: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_draggable(value) {
        /// <value type="Boolean"></value>
        this._setOption('draggable', value);
        return value;
    },
    
    get_stack: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_stack() {
        /// <value type="Boolean"></value>
        return this._getOption('stack');
    },
    set_stack: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_stack(value) {
        /// <value type="Boolean"></value>
        this._setOption('stack', value);
        return value;
    },
    
    get_modal: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_modal() {
        /// <value type="Boolean"></value>
        return this._getOption('modal');
    },
    set_modal: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_modal(value) {
        /// <value type="Boolean"></value>
        this._setOption('modal', value);
        return value;
    },
    
    get_height: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_height() {
        /// <value type="Number"></value>
        return this._getOption('height');
    },
    set_height: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_height(value) {
        /// <value type="Number"></value>
        this._setOption('height', value);
        return value;
    },
    
    get_width: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_width() {
        /// <value type="Number"></value>
        return this._getOption('width');
    },
    set_width: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_width(value) {
        /// <value type="Number"></value>
        this._setOption('width', value);
        return value;
    },
    
    get_hideEffect: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_hideEffect() {
        /// <value type="js.com.JQueryScriptSharp.JQUERY_UI_EFFECT"></value>
        return js.com.JQueryScriptSharp.JQueryEnums.stringToJQueryUIEffect(this._getOption('hide'));
    },
    set_hideEffect: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_hideEffect(value) {
        /// <value type="js.com.JQueryScriptSharp.JQUERY_UI_EFFECT"></value>
        this._setOption('hide', js.com.JQueryScriptSharp.JQueryEnums.jQueryUIEffectToString(value));
        return value;
    },
    
    get_showEffect: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_showEffect() {
        /// <value type="js.com.JQueryScriptSharp.JQUERY_UI_EFFECT"></value>
        return js.com.JQueryScriptSharp.JQueryEnums.stringToJQueryUIEffect(this._getOption('show'));
    },
    set_showEffect: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_showEffect(value) {
        /// <value type="js.com.JQueryScriptSharp.JQUERY_UI_EFFECT"></value>
        this._setOption('show', js.com.JQueryScriptSharp.JQueryEnums.jQueryUIEffectToString(value));
        return value;
    },
    
    get_maxHeight: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_maxHeight() {
        /// <value type="Number"></value>
        return this._getOption('maxHeight');
    },
    set_maxHeight: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_maxHeight(value) {
        /// <value type="Number"></value>
        this._setOption('maxHeight', value);
        return value;
    },
    
    get_minHeight: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_minHeight() {
        /// <value type="Number"></value>
        return this._getOption('minHeight');
    },
    set_minHeight: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_minHeight(value) {
        /// <value type="Number"></value>
        this._setOption('minHeight', value);
        return value;
    },
    
    get_maxWidth: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_maxWidth() {
        /// <value type="Number"></value>
        return this._getOption('maxWidth');
    },
    set_maxWidth: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_maxWidth(value) {
        /// <value type="Number"></value>
        this._setOption('maxWidth', value);
        return value;
    },
    
    get_minWidth: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_minWidth() {
        /// <value type="Number"></value>
        return this._getOption('minWidth');
    },
    set_minWidth: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_minWidth(value) {
        /// <value type="Number"></value>
        this._setOption('minWidth', value);
        return value;
    },
    
    get_title: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_title() {
        /// <value type="String"></value>
        return this._getOption('title');
    },
    set_title: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_title(value) {
        /// <value type="String"></value>
        this._setOption('title', value);
        return value;
    },
    
    get_zIndex: function js_com_cs_v2_UI_JQuery_JQueryDialog$get_zIndex() {
        /// <value type="Number" integer="true"></value>
        return this._getOption('zIndex');
    },
    set_zIndex: function js_com_cs_v2_UI_JQuery_JQueryDialog$set_zIndex(value) {
        /// <value type="Number" integer="true"></value>
        this._setOption('zIndex', value);
        return value;
    },
    
    setOpenPosition: function js_com_cs_v2_UI_JQuery_JQueryDialog$setOpenPosition(x, y) {
        /// <param name="x" type="js.com.JQueryScriptSharp.JQUERY_POSITION">
        /// </param>
        /// <param name="y" type="js.com.JQueryScriptSharp.JQUERY_POSITION">
        /// </param>
        if (isNullOrUndefined(y)) {
            this._setOption('position', js.com.JQueryScriptSharp.JQueryEnums.jQueryPositionToString(x));
        }
        else {
            var valX = x;
            var valY = y;
            if (Type.canCast(x, js.com.JQueryScriptSharp.JQUERY_POSITION)) {
                valX = js.com.JQueryScriptSharp.JQueryEnums.jQueryPositionToString(x);
            }
            if (Type.canCast(y, js.com.JQueryScriptSharp.JQUERY_POSITION)) {
                valY = js.com.JQueryScriptSharp.JQueryEnums.jQueryPositionToString(y);
            }
            var values = [];
            values[0] = valX;
            values[1] = valY;
            this._setOption('position', values);
        }
    },
    
    close: function js_com_cs_v2_UI_JQuery_JQueryDialog$close() {
        this._elem.dialog('close');
    },
    
    open: function js_com_cs_v2_UI_JQuery_JQueryDialog$open() {
        this._elem.dialog('open');
    }
}


Type.createNamespace('js.com.cs.v2.UI.JQuery.prettySociable');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.prettySociable._PrettySociablePopupSettings

js.com.cs.v2.UI.JQuery.prettySociable._PrettySociablePopupSettings = function js_com_cs_v2_UI_JQuery_prettySociable__PrettySociablePopupSettings() {
    /// <field name="width" type="Number" integer="true">
    /// </field>
    /// <field name="height" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociablePopupSettings.prototype = {
    width: 0,
    height: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableTooltipOffset

js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableTooltipOffset = function js_com_cs_v2_UI_JQuery_prettySociable__PrettySociableTooltipOffset() {
    /// <field name="offsetTop" type="Number" integer="true">
    /// </field>
    /// <field name="offsetLeft" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableTooltipOffset.prototype = {
    offsetTop: 0,
    offsetLeft: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableIconSize

js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableIconSize = function js_com_cs_v2_UI_JQuery_prettySociable__PrettySociableIconSize() {
    /// <field name="width" type="Number" integer="true">
    /// </field>
    /// <field name="height" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableIconSize.prototype = {
    width: 0,
    height: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable

js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable = function js_com_cs_v2_UI_JQuery_prettySociable_PrettySociable() {
    /// <field name="_SETTINGS" type="js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings" static="true">
    /// </field>
}
js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.init = function js_com_cs_v2_UI_JQuery_prettySociable_PrettySociable$init(settings) {
    /// <param name="settings" type="js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings">
    /// </param>
    var method = jQuery;
    var p = [];
    if (!isNullOrUndefined(settings)) {
        method.prettySociable(settings);
    }
    else {
        method.prettySociable();
    }
}
js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot = function js_com_cs_v2_UI_JQuery_prettySociable_PrettySociable$_makeIconURLFromRoot(id) {
    /// <param name="id" type="String">
    /// </param>
    var iconURL = (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites[id]).icon;
    if (!iconURL.startsWith('/')) {
        iconURL = '/' + iconURL;
    }
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites[id]).icon = iconURL;
}
js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.initWithDefaultNetworks = function js_com_cs_v2_UI_JQuery_prettySociable_PrettySociable$initWithDefaultNetworks() {
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.init();
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['facebook']).active = true;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['twitter']).active = true;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['delicious']).active = false;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['digg']).active = false;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['linkedin']).active = false;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['reddit']).active = false;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['stumbleupon']).active = false;
    (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['tumblr']).active = false;
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('facebook');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('twitter');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('delicious');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('digg');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('linkedin');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('reddit');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('stumbleupon');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('tumblr');
    js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.init(js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings());
}
js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.get_settings = function js_com_cs_v2_UI_JQuery_prettySociable_PrettySociable$get_settings() {
    /// <value type="js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings"></value>
    try {
        return jQuery.prettySociable.settings;
    }
    catch (ex) {
        if (js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._SETTINGS == null) {
            js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._SETTINGS = {};
            js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._SETTINGS.websites = {};
        }
        return js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._SETTINGS;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings

js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings = function js_com_cs_v2_UI_JQuery_prettySociable__PrettySociableSettings() {
    /// <field name="animationSpeed" type="String">
    /// fast / slow / normal
    /// </field>
    /// <field name="opacity" type="Number">
    /// </field>
    /// <field name="share_label" type="String">
    /// Drag to share
    /// </field>
    /// <field name="share_on_label" type="String">
    /// Share on...
    /// </field>
    /// <field name="hideflash" type="Boolean">
    /// </field>
    /// <field name="hover_padding" type="Number" integer="true">
    /// </field>
    /// <field name="websites" type="Object">
    /// Properties of _prettySociableWebsiteSettings
    /// </field>
    /// <field name="tooltip" type="js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableTooltipOffset">
    /// </field>
    /// <field name="popup" type="js.com.cs.v2.UI.JQuery.prettySociable._PrettySociablePopupSettings">
    /// </field>
    /// <field name="callback" type="DOMEventHandler">
    /// </field>
}
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings.prototype = {
    animationSpeed: null,
    opacity: null,
    share_label: null,
    share_on_label: null,
    hideflash: false,
    hover_padding: 0,
    websites: null,
    tooltip: null,
    popup: null,
    callback: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableWebsiteSettings

js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableWebsiteSettings = function js_com_cs_v2_UI_JQuery_prettySociable__PrettySociableWebsiteSettings() {
    /// <field name="active" type="Boolean">
    /// </field>
    /// <field name="encode" type="String">
    /// </field>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="url" type="String">
    /// </field>
    /// <field name="icon" type="String">
    /// </field>
    /// <field name="sizes" type="js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableIconSize">
    /// </field>
}
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableWebsiteSettings.prototype = {
    active: false,
    encode: null,
    title: null,
    url: null,
    icon: null,
    sizes: null
}


Type.createNamespace('js.com.cs.v2.UI.KeywordSuggest');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest

js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest = function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest(txtKeywords, keywordsSuggestURL, keywordsDelayMS, keywordsParam) {
    /// <param name="txtKeywords" type="String">
    /// The textfield where user types keywords
    /// </param>
    /// <param name="keywordsSuggestURL" type="String">
    /// The URL to submit via AJAX
    /// </param>
    /// <param name="keywordsDelayMS" type="Number" integer="true">
    /// Delay before submitting request when typing
    /// </param>
    /// <param name="keywordsParam" type="String">
    /// The parameter of the keywords variable
    /// </param>
    /// <field name="_offset" type="js.com.cs.v2.Classes.Geom.Point">
    /// </field>
    /// <field name="_txtKeywords" type="js.com.cs.v2.Controls.Form.MyTextBoxSingleLine">
    /// </field>
    /// <field name="_keywordSuggestURL" type="String">
    /// </field>
    /// <field name="_keywordsDelayMS" type="Number" integer="true">
    /// </field>
    /// <field name="_lastCheckedKeywords" type="String">
    /// </field>
    /// <field name="_delayHandler" type="Number" integer="true">
    /// </field>
    /// <field name="keywordsParam" type="String">
    /// </field>
    /// <field name="_xmlRequest" type="XMLHttpRequest">
    /// </field>
    /// <field name="_changeByArrowKeys" type="Boolean">
    /// </field>
    /// <field name="_results" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults">
    /// </field>
    if (!String.isNullOrEmpty(keywordsParam)) {
        this.keywordsParam = keywordsParam;
    }
    if (Type.canCast(txtKeywords, js.com.cs.v2.Controls.Common.MyDOMElement)) {
        this._txtKeywords = txtKeywords;
    }
    else {
        this._txtKeywords = new js.com.cs.v2.Controls.Form.MyTextBoxSingleLine(txtKeywords);
    }
    this._keywordSuggestURL = keywordsSuggestURL;
    this._keywordsDelayMS = keywordsDelayMS;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest.prototype = {
    _offset: null,
    
    get_offset: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$get_offset() {
        /// <value type="js.com.cs.v2.Classes.Geom.Point"></value>
        return this._offset;
    },
    set_offset: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$set_offset(value) {
        /// <value type="js.com.cs.v2.Classes.Geom.Point"></value>
        this._offset = value;
        if (this._results != null) {
            this._results.set_offset(value);
        }
        return value;
    },
    
    _txtKeywords: null,
    
    get_txtKeywords: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$get_txtKeywords() {
        /// <value type="js.com.cs.v2.Controls.Form.MyTextBoxSingleLine"></value>
        return this._txtKeywords;
    },
    
    _keywordSuggestURL: null,
    _keywordsDelayMS: 0,
    _lastCheckedKeywords: null,
    _delayHandler: 0,
    keywordsParam: 'k',
    _xmlRequest: null,
    _changeByArrowKeys: false,
    _results: null,
    
    _initHandlers: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_initHandlers() {
        this._txtKeywords.add_onChangeEvenWithKeys(Delegate.create(this, this._txtKeywords_OnChangeEvenWithKeys));
        this._txtKeywords.add_onBlur(Delegate.create(this, this._txtKeywords_onBlur));
        this._txtKeywords.set_autoComplete(false);
    },
    
    _txtKeywords_onBlur: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_txtKeywords_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._results.hideResults();
    },
    
    _initResults: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_initResults() {
        this._results = new js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults(this._txtKeywords.get_domElement(), this);
        this._results.set_offset(this._offset);
        this._results.add_onResultHighlightChange(Delegate.create(this, this._results_OnResultHighlightChange));
        this._results.add_onResultClicked(Delegate.create(this, this._results_OnResultClicked));
    },
    
    _results_OnResultClicked: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_results_OnResultClicked(result) {
        /// <param name="result" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult">
        /// </param>
        this._txtKeywords.set_value(result.get_keywords());
        this._txtKeywords.focus();
        js.com.cs.v2.UI.Forms.FormsCollection.get_instance().clickCurrentFormDefaultButton();
    },
    
    _results_OnResultHighlightChange: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_results_OnResultHighlightChange(result) {
        /// <param name="result" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult">
        /// </param>
        if (result != null && !String.isNullOrEmpty(result.get_keywords())) {
            this._changeByArrowKeys = true;
            this._txtKeywords.focus();
            this._txtKeywords.set_value(result.get_keywords());
        }
    },
    
    _keywordsSuggestResponse: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_keywordsSuggestResponse(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var keywords = data['data'];
        if (!isNullOrUndefined(keywords) && keywords.length > 0) {
            this._results.showNewResults(keywords);
        }
        else {
            this._results.hideResults();
        }
    },
    
    _submitRequest: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_submitRequest() {
        if (!this._changeByArrowKeys && !String.isNullOrEmpty(this._txtKeywords.get_value())) {
            if (this._xmlRequest != null) {
                this._xmlRequest.abort();
                this._xmlRequest = null;
            }
            var data = {};
            data[this.keywordsParam] = this._txtKeywords.get_value();
            this._xmlRequest = jQuery.get(this._keywordSuggestURL, data, Delegate.create(this, this._keywordsSuggestResponse), 'json');
        }
        this._changeByArrowKeys = false;
    },
    
    _checkInputChange: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_checkInputChange() {
        if (this._txtKeywords.get_value() !== this._lastCheckedKeywords) {
            window.clearTimeout(this._delayHandler);
            this._delayHandler = window.setTimeout(Delegate.create(this, this._submitRequest), this._keywordsDelayMS);
        }
    },
    
    _txtKeywords_OnChangeEvenWithKeys: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_txtKeywords_OnChangeEvenWithKeys(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._checkInputChange();
    },
    
    _init: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggest$_init() {
        this._initResults();
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult

js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult = function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult(keywords, index) {
    /// <param name="keywords" type="String">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    /// <field name="_keywords$2" type="String">
    /// </field>
    /// <field name="_index$2" type="Number" integer="true">
    /// </field>
    js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult.constructBase(this);
    this._keywords$2 = keywords;
    this._index$2 = index;
    this.addClass('keyword-suggest-result');
    this.set_innerHTML(keywords);
    this.get_jQueryElement().ready(Delegate.create(this, this._init$2));
}
js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult.prototype = {
    _keywords$2: null,
    
    get_keywords: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$get_keywords() {
        /// <value type="String"></value>
        return this._keywords$2;
    },
    
    _index$2: 0,
    
    get_index: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$get_index() {
        /// <value type="Number" integer="true"></value>
        return this._index$2;
    },
    
    _initHandlers$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$_initHandlers$2() {
    },
    
    _keywordSuggestResult_onMouseLeave$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$_keywordSuggestResult_onMouseLeave$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
    },
    
    _keywordSuggestResult_onMouseEnter$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$_keywordSuggestResult_onMouseEnter$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
    },
    
    _init$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$_init$2() {
        this._initHandlers$2();
    },
    
    highlight: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResult$highlight(highlight) {
        /// <param name="highlight" type="Boolean">
        /// </param>
        if (highlight) {
            this.set_cssClass('keyword-suggest-result-highlight');
        }
        else {
            this.set_cssClass('keyword-suggest-result');
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults

js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults = function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults(wrapAroundElement, keywordSuggest) {
    /// <param name="wrapAroundElement" type="Object" domElement="true">
    /// </param>
    /// <param name="keywordSuggest" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest">
    /// </param>
    /// <field name="_offset$2" type="js.com.cs.v2.Classes.Geom.Point">
    /// </field>
    /// <field name="__onResultHighlightChange$2" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResultHandler">
    /// </field>
    /// <field name="__onResultClicked$2" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResultHandler">
    /// </field>
    /// <field name="_wrapAroundElement$2" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_keywordResults$2" type="Array" elementType="KeywordSuggestResult">
    /// </field>
    /// <field name="_showing$2" type="Boolean">
    /// </field>
    /// <field name="_init$2" type="Boolean">
    /// </field>
    /// <field name="_currHighlighted$2" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult">
    /// </field>
    /// <field name="_keywordSuggest$2" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest">
    /// </field>
    this._keywordResults$2 = [];
    js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults.constructBase(this);
    this._keywordSuggest$2 = keywordSuggest;
    this._wrapAroundElement$2 = new js.com.cs.v2.Controls.Common.MyDOMElement(wrapAroundElement);
    this.addClass('keyword-suggest-results');
    this.get_style().position = 'absolute';
    this._wrapAroundElement$2.get_jQueryElement().ready(Delegate.create(this, this._init$2));
}
js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults.prototype = {
    _offset$2: null,
    
    get_offset: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$get_offset() {
        /// <value type="js.com.cs.v2.Classes.Geom.Point"></value>
        return this._offset$2;
    },
    set_offset: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$set_offset(value) {
        /// <value type="js.com.cs.v2.Classes.Geom.Point"></value>
        this._offset$2 = value;
        return value;
    },
    
    add_onResultHighlightChange: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$add_onResultHighlightChange(value) {
        /// <param name="value" type="Function" />
        this.__onResultHighlightChange$2 = Delegate.combine(this.__onResultHighlightChange$2, value);
    },
    remove_onResultHighlightChange: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$remove_onResultHighlightChange(value) {
        /// <param name="value" type="Function" />
        this.__onResultHighlightChange$2 = Delegate.remove(this.__onResultHighlightChange$2, value);
    },
    
    __onResultHighlightChange$2: null,
    
    add_onResultClicked: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$add_onResultClicked(value) {
        /// <param name="value" type="Function" />
        this.__onResultClicked$2 = Delegate.combine(this.__onResultClicked$2, value);
    },
    remove_onResultClicked: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$remove_onResultClicked(value) {
        /// <param name="value" type="Function" />
        this.__onResultClicked$2 = Delegate.remove(this.__onResultClicked$2, value);
    },
    
    __onResultClicked$2: null,
    _wrapAroundElement$2: null,
    _showing$2: false,
    _init$2: true,
    _currHighlighted$2: null,
    _keywordSuggest$2: null,
    
    _updatePosition$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_updatePosition$2() {
        if (this._showing$2) {
            var pos = this._wrapAroundElement$2.get_jQueryElement().offset();
            var keywordsPos = new js.com.cs.v2.Classes.Geom.Point(pos.left, pos.top + this._wrapAroundElement$2.get_jQueryElement().outerHeight());
            if (this.get_offset() != null) {
                keywordsPos.add(this.get_offset());
            }
            this.get_style().left = keywordsPos.x + 'px';
            this.get_style().top = keywordsPos.y + 'px';
            var wrapAroundElementOuterWidth = this._wrapAroundElement$2.get_jQueryElement().outerWidth();
            var wrapAroundElementBorderLeftWidth = this._wrapAroundElement$2.getBorderLeftWidth();
            var wrapAroundElementBorderRightWidth = this._wrapAroundElement$2.getBorderRightWidth();
            this.get_style().width = (wrapAroundElementOuterWidth - wrapAroundElementBorderLeftWidth - wrapAroundElementBorderRightWidth) + 'px';
        }
    },
    
    _clearResults$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_clearResults$2() {
        while (this._keywordResults$2.length > 0) {
            var kr = js.com.cs.v2.Util.ArrayUtil.pop(this._keywordResults$2);
            kr.remove_onMouseEnter(Delegate.create(this, this._kr_onMouseEnter$2));
            kr.remove_onMouseLeave(Delegate.create(this, this._kr_onMouseLeave$2));
            kr.get_jQueryElement().remove();
        }
    },
    
    showNewResults: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$showNewResults(results) {
        /// <param name="results" type="Array" elementType="String">
        /// </param>
        this._currHighlighted$2 = null;
        if (results == null || results.length === 0) {
            this.hideResults();
        }
        else {
            this._showing$2 = true;
            this._clearResults$2();
            for (var i = 0; i < results.length; i++) {
                var kr = new js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult(results[i], i);
                kr.add_onMouseEnter(Delegate.create(this, this._kr_onMouseEnter$2));
                kr.add_onMouseLeave(Delegate.create(this, this._kr_onMouseLeave$2));
                kr.add_onMouseDown(Delegate.create(this, this._kr_onMouseDown$2));
                this.appendChild(kr);
                this._keywordResults$2[this._keywordResults$2.length] = kr;
            }
            this._updatePosition$2();
            this.showResults();
        }
    },
    
    _kr_onMouseDown$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_kr_onMouseDown$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var kr = e.data;
        if (this.__onResultClicked$2 != null) {
            this.__onResultClicked$2.invoke(kr);
        }
    },
    
    _kr_onMouseLeave$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_kr_onMouseLeave$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._currHighlighted$2 != null && (e.data) === this._currHighlighted$2) {
            this._currHighlighted$2.highlight(false);
            this._currHighlighted$2 = null;
        }
    },
    
    _kr_onMouseEnter$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_kr_onMouseEnter$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var kr = e.data;
        this._highlightResult$2(kr, false);
    },
    
    _highlightResult$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_highlightResult$2(kr, triggerEvent) {
        /// <param name="kr" type="js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult">
        /// </param>
        /// <param name="triggerEvent" type="Boolean">
        /// </param>
        if (kr !== this._currHighlighted$2) {
            if (this._currHighlighted$2 != null) {
                this._currHighlighted$2.highlight(false);
            }
            if (kr != null) {
                kr.highlight(true);
                this._currHighlighted$2 = kr;
            }
            if (triggerEvent && this.__onResultHighlightChange$2 != null) {
                this.__onResultHighlightChange$2.invoke(this._currHighlighted$2);
            }
            this.showResults();
        }
    },
    
    showResults: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$showResults() {
        if (this.get_domElement().parentNode !== document.body) {
            document.body.appendChild(this.get_domElement());
        }
        if (this._init$2) {
            this._init$2 = false;
        }
        this.get_jQueryElement().slideDown(250);
        this._showing$2 = true;
    },
    
    hideResults: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$hideResults() {
        this._showing$2 = false;
        this.get_jQueryElement().slideUp(250);
    },
    
    _init$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_init$2() {
        try {
            this.get_jQueryElement().bgiframe();
        }
        catch (ex) {
        }
        js.com.cs.v2.Util.WindowUtil.get_windowElement().add_onResize(Delegate.create(this, this._windowUtil_onResize$2));
        js.com.cs.v2.Util.WindowUtil.get_windowElement().add_onScroll(Delegate.create(this, this._windowUtil_onScroll$2));
        js.com.cs.v2.Util.DOMUtil.get_document().add_onKeyDown(Delegate.create(this, this._document_onKeyDown$2));
    },
    
    _document_onKeyDown$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_document_onKeyDown$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._keywordSuggest$2.get_txtKeywords().get_hasFocus()) {
            if (e.which === js.com.cs.v2.Enums.KEY.dowN_ARROW) {
                this._incrementHighlight$2(1);
            }
            else if (e.which === js.com.cs.v2.Enums.KEY.uP_ARROW) {
                this._incrementHighlight$2(-1);
            }
        }
    },
    
    _incrementHighlight$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_incrementHighlight$2(increment) {
        /// <param name="increment" type="Number" integer="true">
        /// </param>
        var index = 0;
        if (this._currHighlighted$2 == null) {
            if (increment > 0) {
                index = increment - 1;
            }
            else {
                index = this._keywordResults$2.length + increment;
            }
        }
        else {
            index = this._currHighlighted$2.get_index() + increment;
            if (index < 0) {
                index = this._keywordResults$2.length + index;
            }
            else if (index > this._keywordResults$2.length - 1) {
                index = index - this._keywordResults$2.length;
            }
        }
        this._highlightResult$2(this._keywordResults$2[index], true);
    },
    
    _windowUtil_onScroll$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_windowUtil_onScroll$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._updatePosition$2();
    },
    
    _windowUtil_onResize$2: function js_com_cs_v2_UI_KeywordSuggest_KeywordSuggestResults$_windowUtil_onResize$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._updatePosition$2();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.KeywordSuggest._KeywordSuggestResponse

js.com.cs.v2.UI.KeywordSuggest._KeywordSuggestResponse = function js_com_cs_v2_UI_KeywordSuggest__KeywordSuggestResponse() {
    /// <field name="keyword" type="String">
    /// </field>
}
js.com.cs.v2.UI.KeywordSuggest._KeywordSuggestResponse.prototype = {
    keyword: null
}


Type.createNamespace('js.com.cs.v2.UI.MediaGallery.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionData() {
    /// <field name="title" type="String">
    /// </field>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="items" type="Array" elementType="MediaGalleryItemData">
    /// </field>
    /// <field name="canUpload" type="Boolean">
    /// </field>
    /// <field name="maxAmtItems" type="Number" integer="true">
    /// </field>
    /// <field name="maxUploadText" type="String">
    /// </field>
    /// <field name="remainingUploadText" type="String">
    /// </field>
    /// <field name="limitExceeded" type="String">
    /// </field>
    /// <field name="cantUploadMore" type="String">
    /// </field>
    /// <field name="sectionUploadInstructionsHtmlText" type="String">
    /// Text to show at top
    /// </field>
    /// <field name="sectionNormalInstructionsHtmlText" type="String">
    /// </field>
    /// <field name="noFlashText" type="String">
    /// </field>
    /// <field name="alternateUploadContentID" type="String">
    /// This is used to place an alternate upload content in case Flash is not available.
    /// Such as normal file upload controls so that functionality is still available.
    /// </field>
    /// <field name="alternateUploadContent" type="Object" domElement="true">
    /// </field>
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData.updateAlternateContentFromID = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionData$updateAlternateContentFromID(sectionData) {
    /// <summary>
    /// Update and keep reference
    /// </summary>
    /// <param name="sectionData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </param>
    if (!String.isNullOrEmpty(sectionData.alternateUploadContentID)) {
        var altContent = js.com.JQueryScriptSharp.jQueryUtil.selectById(sectionData.alternateUploadContentID);
        if (altContent.length > 0) {
            sectionData.alternateUploadContent = altContent.get(0);
        }
    }
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData.prototype = {
    title: null,
    id: null,
    items: null,
    canUpload: false,
    maxAmtItems: 0,
    maxUploadText: 'You can upload a maximum of [TOTAL] item(s).',
    remainingUploadText: 'You can upload [REMAINING] more photos from your maximum limit of [TOTAL] item(s).',
    limitExceeded: 'Uploading [UPLOAD] more item(s) will exceed your limit of [TOTAL] total item(s).  Either delete items or upload not more than [LIMIT] item(s).',
    cantUploadMore: 'You cannot upload more item(s) since you have reached your limit of [TOTAL] total item(s).',
    sectionUploadInstructionsHtmlText: null,
    sectionNormalInstructionsHtmlText: null,
    noFlashText: 'In order to use the multiple file uploader, you need to have Adobe Flash Player v9.0.24 (or above) installed.  Installing Adobe Flash Player is safe and very simple.  <br /><a href=\'http://get.adobe.com/flashplayer/\'>Upgrade your Adobe Flash Player now and start using our advanced file uploader!</a>',
    alternateUploadContentID: null,
    alternateUploadContent: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryUpload

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryUpload = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryUpload(settings) {
    /// <param name="settings" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings">
    /// </param>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryUpload.constructBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent(item, cropData) {
    /// <param name="item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
    /// </param>
    /// <param name="cropData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData">
    /// </param>
    /// <field name="__onCropReady$2" type="DOMEventHandler">
    /// </field>
    /// <field name="_item$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
    /// </field>
    /// <field name="_cropData$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData">
    /// </field>
    /// <field name="_divButtons$2" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_aCrop$2" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aSkip$2" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aClose$2" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_img$2" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_cropAPI$2" type="js.com.JQueryScriptSharp._jCropAPI">
    /// </field>
    /// <field name="_openParams$2" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
    /// </field>
    /// <field name="_cropCoordinates$2" type="js.com.JQueryScriptSharp._JCropCoords">
    /// </field>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent.constructBase(this);
    this._item$2 = item;
    this._cropData$2 = cropData;
    this.addClass('cs-media-gallery-crop-item-content');
    this._init$2();
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent.prototype = {
    
    add_onCropReady: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$add_onCropReady(value) {
        /// <param name="value" type="Function" />
        this.__onCropReady$2 = Delegate.combine(this.__onCropReady$2, value);
    },
    remove_onCropReady: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$remove_onCropReady(value) {
        /// <param name="value" type="Function" />
        this.__onCropReady$2 = Delegate.remove(this.__onCropReady$2, value);
    },
    
    __onCropReady$2: null,
    _item$2: null,
    _cropData$2: null,
    
    get_cropData: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$get_cropData() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData"></value>
        return this._cropData$2;
    },
    
    _divButtons$2: null,
    _aCrop$2: null,
    _aSkip$2: null,
    _aClose$2: null,
    _img$2: null,
    _cropAPI$2: null,
    _openParams$2: null,
    _cropCoordinates$2: null,
    
    _initButtons$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_initButtons$2() {
        var divButtons = new js.com.cs.v2.Controls.Common.MyDivElement();
        divButtons.addClass('cs-media-gallery-crop-buttons');
        this._divButtons$2 = divButtons;
        this._aCrop$2 = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        this._aCrop$2.set_innerHTML('Crop');
        this._aCrop$2.addClass('cs-media-gallery-crop-button-crop');
        this._aSkip$2 = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        this._aSkip$2.set_innerHTML('Skip');
        this._aSkip$2.addClass('cs-media-gallery-crop-button-skip');
        this._aClose$2 = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        this._aClose$2.set_innerHTML('Close');
        this._aClose$2.addClass('cs-media-gallery-crop-button-close');
        divButtons.appendChild(this._aCrop$2);
        divButtons.appendChild(this._aSkip$2);
        divButtons.appendChild(this._aClose$2);
        this._aSkip$2.add_onClick(Delegate.create(this, this._btnSkip_onClick$2));
        this._aClose$2.add_onClick(Delegate.create(this, this._btnClose_onClick$2));
        this._aCrop$2.add_onClick(Delegate.create(this, this._btnCrop_onClick$2));
        this.appendChild(divButtons);
    },
    
    _btnSkip_onClick$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_btnSkip_onClick$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._cropReady$2();
    },
    
    _cropReady$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_cropReady$2() {
        Shadowbox.close();
        if (this.__onCropReady$2 != null) {
            this.__onCropReady$2.invoke();
        }
    },
    
    _destroyCrop$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_destroyCrop$2() {
        js.com.JQueryScriptSharp.jQueryUtil.select('.jcrop-holder').remove();
    },
    
    _btnCrop_onClick$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_btnCrop_onClick$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._cropCoordinates$2 == null) {
            alert('Please choose coordinates you would like to crop by clicking and dragging on the image above');
        }
        else {
            this._destroyCrop$2();
            this._submitCrop$2();
        }
    },
    
    _submitCrop$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_submitCrop$2() {
        js.com.cs.v2.Util.jQueryShadowBoxUtil.showShadowBoxLoading('cropping image', 500);
        var cropScript = this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScript;
        var data = {};
        data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptParamCropTypeId] = this._cropData$2.cropID;
        data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptParamId] = this._item$2.get_functionality().get_data().id;
        data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptParamLeft] = this._cropCoordinates$2.x;
        data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptParamTop] = this._cropCoordinates$2.y;
        data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptParamRight] = this._cropCoordinates$2.x2;
        data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptParamBottom] = this._cropCoordinates$2.y2;
        jQuery.get(cropScript, data, Delegate.create(this, this.onCropResponse), 'json');
    },
    
    onCropResponse: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$onCropResponse(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var success = (data[this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptResponseSuccessParam].toString().toLowerCase() === this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptResponseSuccessValue);
        if (success) {
            this._cropReady$2();
        }
        else {
            alert(this._item$2.get_functionality().get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().cropScriptErrorMessage);
            this._cropReady$2();
        }
    },
    
    _btnClose_onClick$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_btnClose_onClick$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        Shadowbox.close();
    },
    
    _getMaxImageWidth$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_getMaxImageWidth$2() {
        /// <returns type="Number" integer="true"></returns>
        return Math.round(Math.floor(this._openParams$2.width) * 0.9);
    },
    
    _getMaxImageHeight$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_getMaxImageHeight$2() {
        /// <returns type="Number" integer="true"></returns>
        return Math.round((Math.floor(this._openParams$2.height) - this._divButtons$2.get_jQueryElement().outerHeight(true)) * 0.9);
    },
    
    _initImage$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_initImage$2(opts) {
        /// <param name="opts" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
        /// </param>
        var img = new js.com.cs.v2.Controls.Common.MyImageElement();
        this._img$2 = img;
        this._img$2.add_onLoad(Delegate.create(this, this._img_onLoad$2));
        img.set_src(this._cropData$2.imageUrl);
        img.set_alt(this._cropData$2.title);
        this.get_jQueryElement().prepend(img.get_domElement());
    },
    
    _initCrop$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_initCrop$2() {
        var opts = {};
        opts.aspectRatio = this._cropData$2.aspectRatio;
        if (!isNullOrUndefined(this._cropData$2.minWidth) && !isNullOrUndefined(this._cropData$2.minHeight)) {
            opts.minSize = [ this._cropData$2.minWidth, this._cropData$2.minHeight ];
        }
        if (!isNullOrUndefined(this._cropData$2.maxWidth) && !isNullOrUndefined(this._cropData$2.maxHeight)) {
            opts.maxSize = [ this._cropData$2.maxWidth, this._cropData$2.maxHeight ];
        }
        opts.onSelect = Delegate.create(this, this._onCropSelect$2);
        this._cropAPI$2 = js.com.JQueryScriptSharp.jQueryUtil.select('img', this.get_domElement()).Jcrop(opts);
    },
    
    _onCropSelect$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_onCropSelect$2(coords) {
        /// <param name="coords" type="js.com.JQueryScriptSharp._JCropCoords">
        /// </param>
        var widthRatio = this._img$2.get_jQueryElement().width() / this._img$2.get_naturalWidth();
        var heightRatio = this._img$2.get_jQueryElement().height() / this._img$2.get_naturalHeight();
        coords.x = Math.round(coords.x / widthRatio);
        coords.y = Math.round(coords.y / widthRatio);
        coords.x2 = Math.round(coords.x2 / widthRatio);
        coords.y2 = Math.round(coords.y2 / widthRatio);
        this._cropCoordinates$2 = coords;
    },
    
    _img_onLoad$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_img_onLoad$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        js.com.cs.v2.Util.jQueryShadowBoxUtil.hideShadowBoxLoading(500);
        this.get_style().display = '';
        this._img$2.remove_onLoad(Delegate.create(this, this._img_onLoad$2));
        if (js.com.cs.v2.Util.GeneralUtil.isIE6()) {
            js.com.cs.v2.Util.ResizeUtil.fitInBox(this._img$2, this._getMaxImageWidth$2(), this._getMaxImageHeight$2());
        }
        else {
            this._img$2.get_style().maxWidth = this._getMaxImageWidth$2() + 'px';
            this._img$2.get_style().maxHeight = this._getMaxImageHeight$2() + 'px';
        }
        if (js.com.cs.v2.Util.jQueryShadowBoxUtil.get_shadowBoxPlayerElement() != null) {
            var yCenter = Math.round((js.com.cs.v2.Util.jQueryShadowBoxUtil.get_shadowBoxPlayerElement().get_jQueryElement().height() - this.get_jQueryElement().height()) / 2);
            if (yCenter > 0) {
                this.get_style().marginTop = yCenter + 'px';
            }
        }
        this._initCrop$2();
    },
    
    _showInShadowbox$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_showInShadowbox$2() {
        var width = (js.com.cs.v2.Util.WindowUtil.getViewportWidth(true) * 0.8);
        var height = (js.com.cs.v2.Util.WindowUtil.getViewportHeight(true) * 0.8);
        js.com.cs.v2.Util.jQueryShadowBoxUtil.openLink('<div></div>', this._cropData$2.title, null, null, width, height, Delegate.create(this, this._onShownInShadowBox$2));
    },
    
    _showLoading$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_showLoading$2() {
        js.com.cs.v2.Util.jQueryShadowBoxUtil.showShadowBoxLoading('loading image', 500);
    },
    
    _onShownInShadowBox$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_onShownInShadowBox$2(options) {
        /// <param name="options" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
        /// </param>
        var divShadowBox = js.com.cs.v2.Util.jQueryShadowBoxUtil.get_shadowBoxPlayerElement();
        divShadowBox.clear();
        divShadowBox.appendChild(this);
        this._showLoading$2();
        this.get_style().display = 'none';
        this._openParams$2 = options;
        this._initButtons$2();
        this._initImage$2(options);
    },
    
    _init$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$_init$2() {
        this._showInShadowbox$2();
    },
    
    destroy: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropContent$destroy() {
        if (this._img$2 != null) {
            this._img$2.remove_onLoad(Delegate.create(this, this._img_onLoad$2));
            this._img$2.destroy();
        }
        this._destroyCrop$2();
        js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent.callBase(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropController(item, aCrop) {
    /// <param name="item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
    /// </param>
    /// <param name="aCrop" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </param>
    /// <field name="_item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
    /// </field>
    /// <field name="_aCrop" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_currCropContent" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent">
    /// </field>
    /// <field name="_cropIndex" type="Number" integer="true">
    /// </field>
    this._item = item;
    this._aCrop = aCrop;
    this._aCrop.add_onClick(Delegate.create(this, this._aCrop_onClick));
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController.prototype = {
    _item: null,
    _aCrop: null,
    _currCropContent: null,
    _cropIndex: 0,
    
    _nextCrop: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropController$_nextCrop() {
        this._cropIndex++;
        if (this._cropIndex < this._item.get_functionality().get_data().cropSizes.length) {
            var cropData = this._item.get_functionality().get_data().cropSizes[this._cropIndex];
            var cropContent = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent(this._item, cropData);
            cropContent.add_onCropReady(Delegate.create(this, this._cropContent_OnCropReady));
        }
    },
    
    _cropContent_OnCropReady: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropController$_cropContent_OnCropReady() {
        window.setTimeout(Delegate.create(this, this._nextCrop), 500);
    },
    
    _jQueryShadowBoxUtil_OnClose: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropController$_jQueryShadowBoxUtil_OnClose(elemOptions) {
        /// <param name="elemOptions" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
        /// </param>
        alert('CLOSED');
    },
    
    _initCrop: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropController$_initCrop() {
        this._cropIndex = -1;
        this._nextCrop();
    },
    
    _aCrop_onClick: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropController$_aCrop_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._initCrop();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemCropData() {
    /// <field name="title" type="String">
    /// </field>
    /// <field name="cropID" type="String">
    /// </field>
    /// <field name="imageUrl" type="String">
    /// </field>
    /// <field name="aspectRatio" type="Number">
    /// Aspect ratio of w/h (e.g. 1 for square)
    /// if the image is a normal 1024x768, then the ratio is 1024/768 = 4/3 = 1.333333333
    /// </field>
    /// <field name="minWidth" type="Number" integer="true">
    /// </field>
    /// <field name="minHeight" type="Number" integer="true">
    /// </field>
    /// <field name="maxWidth" type="Number" integer="true">
    /// </field>
    /// <field name="maxHeight" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData.prototype = {
    title: null,
    cropID: null,
    imageUrl: null,
    aspectRatio: 0,
    minWidth: 0,
    minHeight: 0,
    maxWidth: 0,
    maxHeight: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings

js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings = function js_com_cs_v2_UI_MediaGallery_v1_MediaGallerySettings() {
    /// <field name="sections" type="Array" elementType="MediaGalleryItemSectionData">
    /// </field>
    /// <field name="deleteScript" type="String">
    /// The handler URL which deletes the thumbnail.  This script will receive one parameter 'id'.
    /// The exact name of the parameter is specified using the 'deleteScriptIdParam'
    /// This handler URL expects to return two variable output in JSON format which is 'success' and 'id' and the value must be 'true' and the item ID of the delete item respectively.
    /// The parameter return name can be changed from 'deleteScriptResponseSuccessParam' while the paramter return value may be changed from 'deleteScriptResponseSuccessValue'
    /// </field>
    /// <field name="cropScript" type="String">
    /// The handler URL which crops the image.  This script is called multiple times for every cropping procedure
    /// for every cropping size required (small, medium, large...) This script will receive 6 parameters which are:
    /// - id - (Can be changed from cropScriptParamId)
    /// - cropType - (Can be changed from cropScriptParamId) - This is the type of cropping being performed, e.g. 'small', or 'medium'
    /// - x - (Can be changed from cropScriptParamCropTypeId)
    /// - y - (Can be changed from cropScriptParamTop)
    /// - x2 - (Can be changed from cropScriptParamRight)
    /// - y2 - (Can be changed from cropScriptParamBottom)
    /// The handler must return the following parameters in JSON format:
    /// - success (Can be changed from cropScriptResponseSuccessParam) and must have value 'true' as specified in reorderScriptResponseSuccessValue
    /// If you want to change the crop error message, set the 'cropScriptErrorMessage'
    /// </field>
    /// <field name="reorderScript" type="String">
    /// The handler URL which sets the reordering of items.
    /// This script will receive 1 parameter which is:
    /// - order - (Can be changed from reorderScriptOrderParam) - This will have the list of IDs of items in the required order
    /// - sectionID -  (Can be changed from reorderScriptSectionIDParam)
    /// The handler must return the following parameters in JSON format:
    /// - success (Can be changed from reorderScriptResponseSuccessParam) and must have value 'true' as specified in reorderScriptResponseSuccessValue
    /// If you want to change the crop error message, set the 'reorderItemsErrorMessage'
    /// </field>
    /// <field name="uploadifySettings" type="js.com.JQueryScriptSharp._UploadifySettings">
    /// </field>
    /// <field name="uploadScriptSectionIdParam" type="String">
    /// </field>
    /// <field name="uploadScriptResponseUploadedMediaItemParam" type="String">
    /// </field>
    /// <field name="uploadScriptProblemsUploadingWithAlternateUpload" type="String">
    /// This must include an [a] href which will be clickable to show the alternate content
    /// </field>
    /// <field name="uploadScriptProblemsUploadingWithoutAlternateUpload" type="String">
    /// </field>
    /// <field name="uploadScriptHelpURL" type="String">
    /// </field>
    /// <field name="uploadScriptHelpURLText" type="String">
    /// </field>
    /// <field name="deleteScriptIdParam" type="String">
    /// </field>
    /// <field name="deleteScriptExtraParams" type="Object">
    /// </field>
    /// <field name="deleteScriptResponseIdParam" type="String">
    /// </field>
    /// <field name="deleteScriptResponseSuccessParam" type="String">
    /// </field>
    /// <field name="deleteScriptResponseSuccessValue" type="String">
    /// </field>
    /// <field name="cropScriptParamId" type="String">
    /// </field>
    /// <field name="cropScriptParamCropTypeId" type="String">
    /// </field>
    /// <field name="cropScriptResponseSuccessParam" type="String">
    /// </field>
    /// <field name="cropScriptResponseSuccessValue" type="String">
    /// </field>
    /// <field name="cropScriptParamLeft" type="String">
    /// </field>
    /// <field name="cropScriptParamTop" type="String">
    /// </field>
    /// <field name="cropScriptParamBottom" type="String">
    /// </field>
    /// <field name="cropScriptParamRight" type="String">
    /// </field>
    /// <field name="cropScriptErrorMessage" type="String">
    /// </field>
    /// <field name="cropScriptExtraParams" type="Object">
    /// </field>
    /// <field name="reorderScriptOrderParam" type="String">
    /// </field>
    /// <field name="reorderScriptSectionIDParam" type="String">
    /// </field>
    /// <field name="reorderScriptExtraParams" type="Object">
    /// </field>
    /// <field name="reorderScriptResponseSuccessParam" type="String">
    /// </field>
    /// <field name="reorderScriptResponseSuccessValue" type="String">
    /// </field>
    /// <field name="reorderItemsErrorMessage" type="String">
    /// </field>
    /// <field name="confirmDeleteMessage" type="String">
    /// </field>
    /// <field name="deleteItemErrorMessage" type="String">
    /// </field>
    /// <field name="captionScript" type="String">
    /// The handler URL which updates the caption of the items
    /// This script will receive 1 parameter which is:
    /// - id - (Can be changed from captionScriptParamId) - The ID of the item being edited
    /// - value - (Can be changed from captionScriptParamValue) - The new value of the caption
    /// If you want to change the error message, set the 'captionOverTooltip'
    /// </field>
    /// <field name="captionScriptParamId" type="String">
    /// </field>
    /// <field name="captionScriptParamValue" type="String">
    /// </field>
    /// <field name="captionOverTooltip" type="String">
    /// </field>
    /// <field name="captionUpdateIndicator" type="String">
    /// </field>
    /// <field name="noItemsAvailableText" type="String">
    /// </field>
    this.uploadifySettings = {};
    this.deleteScriptExtraParams = {};
    this.cropScriptExtraParams = {};
    this.reorderScriptExtraParams = {};
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings.updateAlternateContentFromIds = function js_com_cs_v2_UI_MediaGallery_v1_MediaGallerySettings$updateAlternateContentFromIds(sections) {
    /// <param name="sections" type="Array" elementType="MediaGalleryItemSectionData">
    /// </param>
    for (var i = 0; i < sections.length; i++) {
        js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData.updateAlternateContentFromID(sections[i]);
    }
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings.prototype = {
    sections: null,
    deleteScript: '/ajax/tmp/deleteTempImage.ashx',
    cropScript: '/ajax/tmp/cropTempImage.ashx',
    reorderScript: '/ajax/tmp/reorderImages.ashx',
    uploadScriptSectionIdParam: 'sectionID',
    uploadScriptResponseUploadedMediaItemParam: 'item',
    uploadScriptProblemsUploadingWithAlternateUpload: 'If you are having problems uploading using our Flash Uploader, <a href=\'javascript:\'>switch to the basic file uploader</a>.',
    uploadScriptProblemsUploadingWithoutAlternateUpload: 'If you are having problems uploading using our Flash Uploader, please contact the administrators.',
    uploadScriptHelpURL: null,
    uploadScriptHelpURLText: 'Visit the <a href=\'[URL]\' target=\'_blank\'>uploader help & tips section</a> for more information on using the advanced Flash Uploader.',
    deleteScriptIdParam: 'id',
    deleteScriptResponseIdParam: 'id',
    deleteScriptResponseSuccessParam: 'success',
    deleteScriptResponseSuccessValue: 'true',
    cropScriptParamId: 'id',
    cropScriptParamCropTypeId: 'cropType',
    cropScriptResponseSuccessParam: 'success',
    cropScriptResponseSuccessValue: 'true',
    cropScriptParamLeft: 'x',
    cropScriptParamTop: 'y',
    cropScriptParamBottom: 'y2',
    cropScriptParamRight: 'x2',
    cropScriptErrorMessage: 'An error has been encountered whilst cropping image.  Please try again.',
    reorderScriptOrderParam: 'order',
    reorderScriptSectionIDParam: 'sectionID',
    reorderScriptResponseSuccessParam: 'success',
    reorderScriptResponseSuccessValue: 'true',
    reorderItemsErrorMessage: 'An error has been encountered while trying to reorder images.  Please try again.',
    confirmDeleteMessage: 'Are you sure you want to delete the selected item?',
    deleteItemErrorMessage: 'An error has been encountered while trying to delete image.  Please try again.',
    captionScript: '/ajax/tmp/updateCaption.ashx',
    captionScriptParamId: 'id',
    captionScriptParamValue: 'value',
    captionOverTooltip: 'Click on caption to edit caption.  Press ENTER to save changes.  Press ESC to cancel changes',
    captionUpdateIndicator: 'Updating Caption...',
    noItemsAvailableText: 'No images available.'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality(tab) {
    /// <param name="tab" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab">
    /// </param>
    /// <field name="_tab" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab">
    /// </field>
    /// <field name="_section" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </field>
    this._tab = tab;
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality.prototype = {
    _tab: null,
    _section: null,
    
    get_section: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$get_section() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        return this._section;
    },
    set_section: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$set_section(value) {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        this._section = value;
        return value;
    },
    
    _initContainer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$_initContainer() {
        this._tab.addClass('cs-media-gallery-tab');
    },
    
    _initTab: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$_initTab() {
        this._tab.set_innerHTML(this._section.get_functionality().get_sectionData().title);
    },
    
    init: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$init() {
        this._initContainer();
        this._initTab();
    },
    
    select: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$select() {
        this._tab.addClass('selected');
        this._section.get_style().display = '';
    },
    
    unSelect: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabFunctionality$unSelect() {
        this._tab.removeClass('selected');
        this._section.get_style().display = 'none';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTab(section) {
    /// <param name="section" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </param>
    /// <field name="_functionality$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality">
    /// </field>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab.constructBase(this);
    this._functionality$2 = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality(this);
    this._functionality$2.set_section(section);
    this._functionality$2.init();
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTab$get_functionality() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality(tabs) {
    /// <param name="tabs" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs">
    /// </param>
    /// <field name="_selectedTab" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab">
    /// </field>
    /// <field name="_tabs" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs">
    /// </field>
    /// <field name="_tabItems" type="Array" elementType="MediaGalleryTab">
    /// </field>
    this._tabs = tabs;
    this._tabItems = [];
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality.prototype = {
    _selectedTab: null,
    _tabs: null,
    _tabItems: null,
    
    get_tabItems: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$get_tabItems() {
        /// <value type="Array" elementType="MediaGalleryTab"></value>
        return this._tabItems;
    },
    
    _initContainer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$_initContainer() {
        this._tabs.addClass('cs-media-gallery-tabs');
    },
    
    addTab: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$addTab(section) {
        /// <param name="section" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab"></returns>
        var tab = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab(section);
        this._tabItems[this._tabItems.length] = tab;
        tab.add_onClick(Delegate.create(this, this._tab_onClick));
        tab.get_functionality().unSelect();
        this._tabs.appendChild(tab);
        tab.addClass(section.get_functionality().get_sectionData().title.toLowerCase());
        return tab;
    },
    
    selectTab: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$selectTab(tab) {
        /// <param name="tab" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab">
        /// </param>
        if (tab !== this._selectedTab) {
            if (this._selectedTab != null) {
                this._selectedTab.get_functionality().unSelect();
            }
            if (tab != null) {
                tab.get_functionality().select();
            }
            this._selectedTab = tab;
        }
    },
    
    _tab_onClick: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$_tab_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        var tab = Type.safeCast(e.data, js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab);
        this.selectTab(tab);
    },
    
    selectInitialTab: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$selectInitialTab() {
        if (this._tabItems.length > 0) {
            this.selectTab(this._tabItems[0]);
        }
    },
    
    init: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$init() {
        this._initContainer();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabs() {
    /// <field name="_functionality$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality">
    /// </field>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs.constructBase(this);
    this._functionality$2 = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality(this);
    this._functionality$2.init();
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryTabs$get_functionality() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality(section, sectionData) {
    /// <param name="section" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </param>
    /// <param name="sectionData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </param>
    /// <field name="_lastSortedIDs" type="String">
    /// </field>
    /// <field name="_uploadIntervalAlert" type="js.com.cs.v2.Time.Interval">
    /// </field>
    /// <field name="_section" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </field>
    /// <field name="_sectionData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </field>
    /// <field name="_altContentUpload" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_mediaGallery" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery">
    /// </field>
    /// <field name="_items" type="Array" elementType="MediaGalleryItem">
    /// </field>
    /// <field name="_divItems" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divUpload" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divUploadContainer" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_fileUpload" type="js.com.cs.v2.Controls.Form.MyFileUpload">
    /// </field>
    /// <field name="_divProblemsUploading" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_pMaxUpload" type="js.com.cs.v2.Controls.Common.MyParagraphElement">
    /// </field>
    /// <field name="_divNoItems" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    this._section = section;
    this._sectionData = sectionData;
    this._divItems = new js.com.cs.v2.Controls.Common.MyDivElement();
    this._divItems.addClass(js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS);
    this._section.appendChild(this._divItems);
    this._items = [];
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality.prototype = {
    _lastSortedIDs: null,
    
    get_lastSortedIDs: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_lastSortedIDs() {
        /// <value type="String"></value>
        return this._lastSortedIDs;
    },
    set_lastSortedIDs: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$set_lastSortedIDs(value) {
        /// <value type="String"></value>
        this._lastSortedIDs = value;
        return value;
    },
    
    _uploadIntervalAlert: null,
    _section: null,
    _sectionData: null,
    _altContentUpload: null,
    
    get_sectionData: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_sectionData() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData"></value>
        return this._sectionData;
    },
    set_sectionData: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$set_sectionData(value) {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData"></value>
        this._sectionData = value;
        return value;
    },
    
    _mediaGallery: null,
    _items: null,
    
    get_items: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_items() {
        /// <value type="Array" elementType="MediaGalleryItem"></value>
        return this._items;
    },
    
    get_mediaGallery: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_mediaGallery() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery"></value>
        return this._mediaGallery;
    },
    set_mediaGallery: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$set_mediaGallery(value) {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery"></value>
        this._mediaGallery = value;
        this._initFunctionality();
        return value;
    },
    
    _divItems: null,
    _divUpload: null,
    _divUploadContainer: null,
    _fileUpload: null,
    _divProblemsUploading: null,
    _pMaxUpload: null,
    _divNoItems: null,
    
    addItem: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$addItem(item, fadeInDuration) {
        /// <param name="item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
        /// </param>
        /// <param name="fadeInDuration" type="Number" integer="true">
        /// </param>
        if (!(Type.canCast(item, js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem))) {
            item = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem(item);
        }
        this._divItems.appendChild(item);
        item.get_functionality().set_section(this._section);
        item.get_functionality().set_index(this._items.length);
        this._items[this._items.length] = item;
        item.get_functionality().initializeFunctionality();
        this._lastSortedIDs = this.getSortedIds();
        var opts = {};
        if (fadeInDuration > 0) {
            item.get_jQueryElement().fadeOut(0);
            item.get_jQueryElement().fadeIn(1000);
        }
        item.get_functionality().add_onDelete(Delegate.create(this, this._itemOnDelete));
        this._updateNoItems();
        this._updateMaxUpload();
    },
    
    _itemOnDelete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_itemOnDelete(item) {
        /// <param name="item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
        /// </param>
        js.com.cs.v2.Util.ArrayUtil.removeObjectFromArray(this._items, item);
        this._updateNoItems();
        this._updateMaxUpload();
    },
    
    _initInstructionsText: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initInstructionsText() {
        if ((this._sectionData.canUpload && !String.isNullOrEmpty(this._sectionData.sectionUploadInstructionsHtmlText)) || (!this._sectionData.canUpload && !String.isNullOrEmpty(this._sectionData.sectionNormalInstructionsHtmlText))) {
            var divSectionEditText = new js.com.cs.v2.Controls.Common.MyDivElement();
            divSectionEditText.addClass('cs-media-gallery-section-instructions');
            divSectionEditText.set_innerHTML((this._sectionData.canUpload) ? this._sectionData.sectionUploadInstructionsHtmlText : this._sectionData.sectionNormalInstructionsHtmlText);
            this._section.get_jQueryElement().prepend(divSectionEditText.get_domElement());
        }
    },
    
    _updateNoItems: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_updateNoItems() {
        if (this._items.length === 0) {
            if (this._divNoItems == null) {
                this._divNoItems = new js.com.cs.v2.Controls.Common.MyDivElement();
                this._divNoItems.addClass('cs-media-gallery-section-no-items');
            }
            this._divNoItems.set_innerHTML(this._mediaGallery.get_functionality().get_settings().noItemsAvailableText);
            this._divItems.get_jQueryElement().after(this._divNoItems.get_domElement());
        }
        else {
            if (this._divNoItems != null && this._divNoItems.get_domElement().parentNode != null) {
                this._divNoItems.remove();
            }
        }
    },
    
    _initContainer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initContainer() {
        this._section.addClass('cs-media-gallery-section');
    },
    
    _initProblemsUploadFlashPlayer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initProblemsUploadFlashPlayer() {
        this._divProblemsUploading = new js.com.cs.v2.Controls.Common.MyDivElement();
        this._divProblemsUploading.addClass('cs-media-gallery-section-upload-problems');
        var pProblems = new js.com.cs.v2.Controls.Common.MyParagraphElement();
        if (!String.isNullOrEmpty(this.get_sectionData().alternateUploadContentID)) {
            pProblems.set_innerHTML('');
            if (!String.isNullOrEmpty(this.get_mediaGallery().get_functionality().get_settings().uploadScriptHelpURL) && !String.isNullOrEmpty(this.get_mediaGallery().get_functionality().get_settings().uploadScriptHelpURLText)) {
                pProblems.set_innerHTML(this.get_mediaGallery().get_functionality().get_settings().uploadScriptHelpURLText.replace('[URL]', this.get_mediaGallery().get_functionality().get_settings().uploadScriptHelpURL) + ' ');
            }
            pProblems.set_innerHTML(pProblems.get_innerHTML() + this.get_mediaGallery().get_functionality().get_settings().uploadScriptProblemsUploadingWithAlternateUpload);
            this._divProblemsUploading.appendChild(pProblems);
            this._divUpload.appendChild(this._divProblemsUploading);
            var aProblems = js.com.JQueryScriptSharp.jQueryUtil.select('a', this._divUpload.get_domElement());
            var aProblem = new js.com.cs.v2.Controls.Common.MyAnchorElement(aProblems.get(aProblems.length - 1));
            aProblem.add_onClick(Delegate.create(this, this._aProblem_onClick));
        }
        else {
            pProblems.set_innerHTML(this.get_mediaGallery().get_functionality().get_settings().uploadScriptProblemsUploadingWithoutAlternateUpload);
        }
    },
    
    _aProblem_onClick: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_aProblem_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._switchFlashUploaderWithAlternateUploadContent();
    },
    
    _switchFlashUploaderWithAlternateUploadContent: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_switchFlashUploaderWithAlternateUploadContent() {
        if (isNullOrUndefined(this._altContentUpload)) {
            this._getAlternateUploadContentFromSettings(true);
        }
        this._divProblemsUploading.get_jQueryElement().after(this._altContentUpload.get_domElement());
        this._divProblemsUploading.remove(true);
    },
    
    _initUpload: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initUpload() {
        if (this._sectionData.canUpload) {
            var requiredFlashVersionUploadify = '9.0.24';
            var hasRequiredFlash = js.com.cs.v2.Util.SWFObjectUtil.hasFlashPlayerVersion(requiredFlashVersionUploadify);
            this._divUpload = new js.com.cs.v2.Controls.Common.MyDivElement();
            this._divUpload.addClass('cs-media-gallery-upload');
            this._section.appendChild(this._divUpload);
            if (hasRequiredFlash) {
                var divUploadContainer = new js.com.cs.v2.Controls.Common.MyDivElement();
                this._divUploadContainer = divUploadContainer;
                divUploadContainer.addClass('cs-media-gallery-upload-container');
                if (this._sectionData.maxAmtItems !== 0) {
                    this._pMaxUpload = new js.com.cs.v2.Controls.Common.MyParagraphElement();
                    this._divUpload.appendChild(this._pMaxUpload);
                    this._pMaxUpload.addClass('cs-media-gallery-upload-max-upload');
                    this._updateMaxUpload();
                }
                this._fileUpload = new js.com.cs.v2.Controls.Form.MyFileUpload();
                this._fileUpload.set_id('csMediaGalleryUploader' + this.get_sectionData().title.replace(' ', ''));
                this._divUpload.appendChild(divUploadContainer);
                divUploadContainer.appendChild(this._fileUpload);
                var uploadifySettings = this._section.get_functionality().get_mediaGallery().get_functionality().get_settings().uploadifySettings;
                if (String.isNullOrEmpty(uploadifySettings.uploader)) {
                    uploadifySettings.uploader = '/_common/js/jQuery/plugins/uploadify/2.1.0/uploadify.swf';
                }
                uploadifySettings.multi = true;
                uploadifySettings.auto = true;
                uploadifySettings.onComplete = Delegate.create(this, this.onUploadComplete);
                uploadifySettings.onSelectOnce = Delegate.create(this, this.onUploadOpenItem);
                js.com.cs.v2.Util.jQueryUploadifyUtil.initUploadify(uploadifySettings, this._fileUpload.get_id());
                this._initProblemsUploadFlashPlayer();
            }
            else {
                if (!String.isNullOrEmpty(this.get_sectionData().noFlashText)) {
                    var pNoFlash = new js.com.cs.v2.Controls.Common.MyParagraphElement();
                    pNoFlash.addClass('cs-media-gallery-upload-no-flash');
                    pNoFlash.set_innerHTML(this.get_sectionData().noFlashText);
                    this._divUpload.appendChild(pNoFlash);
                }
                if (!String.isNullOrEmpty(this.get_sectionData().alternateUploadContentID)) {
                    var altUploadContent = this._altContentUpload;
                    if (isNullOrUndefined(altUploadContent)) {
                        altUploadContent = new js.com.cs.v2.Controls.Common.MyDOMElement(this._getAlternateUploadContentFromSettings(true));
                    }
                    this._divUpload.appendChild(altUploadContent);
                }
            }
        }
    },
    
    _updateMaxUpload: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_updateMaxUpload() {
        if (this._pMaxUpload != null) {
            var amtRemaining = this._sectionData.maxAmtItems - this.get_items().length;
            var text = '';
            if (amtRemaining > 0) {
                text = this._sectionData.remainingUploadText.replace('[REMAINING]', amtRemaining.toString()).replace('[TOTAL]', this._sectionData.maxAmtItems.toString());
            }
            else {
                text = this._sectionData.cantUploadMore.replace('[TOTAL]', this._sectionData.maxAmtItems.toString());
            }
            this._pMaxUpload.set_innerHTML(text);
        }
    },
    
    onUploadComplete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$onUploadComplete(e, queueID, fileObj, response, data) {
        /// <param name="e" type="Event">
        /// </param>
        /// <param name="queueID" type="String">
        /// </param>
        /// <param name="fileObj" type="js.com.JQueryScriptSharp._UploadifyFileObject">
        /// </param>
        /// <param name="response" type="String">
        /// </param>
        /// <param name="data" type="js.com.JQueryScriptSharp._UploadifyCompleteData">
        /// </param>
        /// <returns type="Boolean"></returns>
        var objResponse = jQuery.parseJSON(response);
        var itemData = objResponse[this._section.get_functionality().get_mediaGallery().get_functionality().get_settings().uploadScriptResponseUploadedMediaItemParam];
        this.addItem(itemData, 1000);
        this._updateMaxUpload();
        return true;
    },
    
    onUploadOpenItem: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$onUploadOpenItem(e, data) {
        /// <param name="e" type="Event">
        /// </param>
        /// <param name="data" type="js.com.JQueryScriptSharp._UploadifySelectOnceData">
        /// </param>
        /// <returns type="Boolean"></returns>
        var newAmt = this._items.length + data.fileCount;
        if (newAmt > this._sectionData.maxAmtItems) {
            js.com.JQueryScriptSharp.jQueryUtil.selectById(this._fileUpload.get_id()).uploadifyClearQueue();
            if (this._uploadIntervalAlert != null) {
                this._uploadIntervalAlert.destroy();
            }
            var limit = this._sectionData.maxAmtItems - this._items.length;
            var text = this._sectionData.limitExceeded.replace('[UPLOAD]', data.fileCount.toString()).replace('[TOTAL]', this._sectionData.maxAmtItems.toString()).replace('[LIMIT]', limit.toString());
            this._uploadIntervalAlert = new js.com.cs.v2.Time.Interval(150, 1, text);
            this._uploadIntervalAlert.add_onTick(Delegate.create(this, this._uploadIntervalAlert_OnTick));
            this._uploadIntervalAlert.start();
        }
        return true;
    },
    
    _uploadIntervalAlert_OnTick: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_uploadIntervalAlert_OnTick(interval, repeatCount, data) {
        /// <param name="interval" type="js.com.cs.v2.Time.Interval">
        /// </param>
        /// <param name="repeatCount" type="Number" integer="true">
        /// </param>
        /// <param name="data" type="Object">
        /// </param>
        /// <returns type="Boolean"></returns>
        alert(data);
        this._uploadIntervalAlert.remove_onTick(Delegate.create(this, this._uploadIntervalAlert_OnTick));
        this._uploadIntervalAlert.destroy();
        this._uploadIntervalAlert = null;
        return true;
    },
    
    _initSortable: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initSortable() {
        /// <summary>
        /// Initialize the sorting of images using the jQuery UI plugin
        /// </summary>
        js.com.JQueryScriptSharp.jQueryUtil.select('.' + js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS, this._section.get_domElement()).sortable('destroy');
        var options = {};
        options.handle = 'a.' + js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.csS_BTN_REORDER;
        options.stop = Delegate.create(this, this._sortingStop);
        js.com.JQueryScriptSharp.jQueryUtil.select('.' + js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS, this._section.get_domElement()).sortable(options);
    },
    
    _sortingStop: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_sortingStop(e, ui) {
        /// <summary>
        /// Sorting stopped so submit requrest AJAX
        /// </summary>
        /// <param name="e" type="Event">
        /// </param>
        /// <param name="ui" type="js.com.JQueryScriptSharp._jQueryUISortableOptionsEventUI">
        /// </param>
        if (ui.item.length > 0) {
            var elem = ui.item[0];
            var item = this.getMediaGalleryItemFromDOMElement(elem);
            var section = item.get_functionality().get_section();
            var sortedIDs = section.get_functionality().getSortedIds();
            var sectionID = section.get_functionality().get_sectionData().id;
            if (sortedIDs !== section.get_functionality().get_lastSortedIDs()) {
                if (isNullOrUndefined(this.get_mediaGallery().get_functionality().get_settings().reorderScriptExtraParams)) {
                    this.get_mediaGallery().get_functionality().get_settings().reorderScriptExtraParams = {};
                }
                this.get_mediaGallery().get_functionality().get_settings().reorderScriptExtraParams[this.get_mediaGallery().get_functionality().get_settings().reorderScriptOrderParam] = sortedIDs;
                this.get_mediaGallery().get_functionality().get_settings().reorderScriptExtraParams[this.get_mediaGallery().get_functionality().get_settings().reorderScriptSectionIDParam] = sectionID;
                jQuery.get(this.get_mediaGallery().get_functionality().get_settings().reorderScript, this.get_mediaGallery().get_functionality().get_settings().reorderScriptExtraParams, Delegate.create(this, this._sortingResponse), 'json');
                section.get_functionality().set_lastSortedIDs(sortedIDs);
            }
        }
    },
    
    _sortingResponse: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_sortingResponse(data, textStatus) {
        /// <summary>
        /// Received when sorting is ready
        /// </summary>
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var successValue = data[this.get_mediaGallery().get_functionality().get_settings().reorderScriptResponseSuccessParam].toString();
        if (successValue.toLowerCase() === this.get_mediaGallery().get_functionality().get_settings().reorderScriptResponseSuccessValue.toLowerCase()) {
        }
        else {
            alert(this.get_mediaGallery().get_functionality().get_settings().reorderItemsErrorMessage);
        }
    },
    
    _getAlternateUploadContentFromSettings: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_getAlternateUploadContentFromSettings(alertError) {
        /// <summary>
        /// Called initially before DOM is ready just in case it gets removed afterwards and stores the reference.
        /// </summary>
        /// <param name="alertError" type="Boolean">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (this.get_sectionData().alternateUploadContent != null) {
            return this.get_sectionData().alternateUploadContent;
        }
        else {
            if (!String.isNullOrEmpty(this.get_sectionData().alternateUploadContentID)) {
                var elemAltUpload = js.com.JQueryScriptSharp.jQueryUtil.selectById(this.get_sectionData().alternateUploadContentID);
                if (elemAltUpload.length > 0) {
                    return elemAltUpload.get(0);
                }
                else {
                    if (alertError) {
                        alert('Alternate content with id: \'' + this.get_sectionData().alternateUploadContentID + '\' not found in DOM');
                    }
                }
            }
        }
        return null;
    },
    
    _initAlternateUploadContent: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initAlternateUploadContent() {
        var elemAltUpload = this._getAlternateUploadContentFromSettings(false);
        if (elemAltUpload != null) {
            this._altContentUpload = new js.com.cs.v2.Controls.Common.MyDOMElement(elemAltUpload);
            this._altContentUpload.remove();
        }
    },
    
    _initFunctionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initFunctionality() {
        this._initSortable();
        this._initAlternateUploadContent();
        js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._initUpload));
        this._updateNoItems();
        this._initInstructionsText();
    },
    
    init: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$init() {
        this._initContainer();
    },
    
    getMediaGalleryItemFromDOMElement: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$getMediaGalleryItemFromDOMElement(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        for (var i = 0; i < this._items.length; i++) {
            if (this._items[i].get_domElement() === elem) {
                return this._items[i];
            }
        }
        return null;
    },
    
    getMediaGalleryItemFromID: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$getMediaGalleryItemFromID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        id = id.toLowerCase();
        for (var i = 0; i < this._items.length; i++) {
            if (this._items[i].get_functionality().get_data().id.toLowerCase() === id) {
                return this._items[i];
            }
        }
        return null;
    },
    
    getSortedIds: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$getSortedIds() {
        /// <returns type="String"></returns>
        var sortedIDs = '';
        for (var i = 0; i < this._divItems.get_domElement().children.length; i++) {
            if (i > 0) {
                sortedIDs += ',';
            }
            var childElem = this._divItems.get_domElement().children[i];
            var childItem = this._section.get_functionality().getMediaGalleryItemFromDOMElement(childElem);
            sortedIDs += childItem.get_functionality().get_data().id;
        }
        return sortedIDs;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSection(sectionData) {
    /// <param name="sectionData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </param>
    /// <field name="csS_CLASS_ITEMS" type="String" static="true">
    /// </field>
    /// <field name="_functionality$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality">
    /// </field>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.constructBase(this);
    this._functionality$2 = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality(this, sectionData);
    this._functionality$2.init();
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemSection$get_functionality() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemData() {
    /// <field name="canDelete" type="Boolean">
    /// This will add a delete button
    /// </field>
    /// <field name="canCrop" type="Boolean">
    /// </field>
    /// <field name="canReorder" type="Boolean">
    /// </field>
    /// <field name="canEditCaption" type="Boolean">
    /// </field>
    /// <field name="thumbURL" type="String">
    /// </field>
    /// <field name="itemURL" type="String">
    /// </field>
    /// <field name="caption" type="String">
    /// </field>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="width" type="Number" integer="true">
    /// </field>
    /// <field name="height" type="Number" integer="true">
    /// </field>
    /// <field name="cropSizes" type="Array" elementType="MediaGalleryItemCropData">
    /// </field>
    /// <field name="buttons" type="Array" elementType="MyDOMElement">
    /// </field>
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData.prototype = {
    canDelete: false,
    canCrop: false,
    canReorder: false,
    canEditCaption: false,
    thumbURL: null,
    itemURL: null,
    caption: null,
    id: null,
    width: 0,
    height: 0,
    cropSizes: null,
    buttons: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality(item, data) {
    /// <param name="item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
    /// </param>
    /// <param name="data" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData">
    /// </param>
    /// <field name="__onDelete" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemHandler">
    /// </field>
    /// <field name="_ALERT_MSG_CROP_SHOWN" type="Boolean" static="true">
    /// </field>
    /// <field name="_ALERT_MSG_REORDER_SHOWN" type="Boolean" static="true">
    /// </field>
    /// <field name="_ALERT_MSG_DELETE_SHOWN" type="Boolean" static="true">
    /// </field>
    /// <field name="_ALERT_MSG_CAPTION_SHOWN" type="Boolean" static="true">
    /// </field>
    /// <field name="_section" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </field>
    /// <field name="_item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
    /// </field>
    /// <field name="_data" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData">
    /// </field>
    /// <field name="_aThumb" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_imgThumb" type="js.com.cs.v2.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_divImage" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divCaption" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_divButtons" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_aCrop" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aDelete" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aReorder" type="js.com.cs.v2.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_cropController" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController">
    /// </field>
    /// <field name="_index" type="Number" integer="true">
    /// </field>
    this._item = item;
    this._data = data;
    this.init();
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality.prototype = {
    
    add_onDelete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$add_onDelete(value) {
        /// <param name="value" type="Function" />
        this.__onDelete = Delegate.combine(this.__onDelete, value);
    },
    remove_onDelete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$remove_onDelete(value) {
        /// <param name="value" type="Function" />
        this.__onDelete = Delegate.remove(this.__onDelete, value);
    },
    
    __onDelete: null,
    _section: null,
    
    get_section: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_section() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        return this._section;
    },
    set_section: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_section(value) {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        this._section = value;
        return value;
    },
    
    _item: null,
    _data: null,
    _aThumb: null,
    _imgThumb: null,
    _divImage: null,
    _divCaption: null,
    _divButtons: null,
    _aCrop: null,
    
    get_aCrop: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_aCrop() {
        /// <value type="js.com.cs.v2.Controls.Common.MyAnchorElement"></value>
        return this._aCrop;
    },
    set_aCrop: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_aCrop(value) {
        /// <value type="js.com.cs.v2.Controls.Common.MyAnchorElement"></value>
        this._aCrop = value;
        return value;
    },
    
    _aDelete: null,
    
    get_aDelete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_aDelete() {
        /// <value type="js.com.cs.v2.Controls.Common.MyAnchorElement"></value>
        return this._aDelete;
    },
    set_aDelete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_aDelete(value) {
        /// <value type="js.com.cs.v2.Controls.Common.MyAnchorElement"></value>
        this._aDelete = value;
        return value;
    },
    
    _aReorder: null,
    
    get_aReorder: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_aReorder() {
        /// <value type="js.com.cs.v2.Controls.Common.MyAnchorElement"></value>
        return this._aReorder;
    },
    set_aReorder: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_aReorder(value) {
        /// <value type="js.com.cs.v2.Controls.Common.MyAnchorElement"></value>
        this._aReorder = value;
        return value;
    },
    
    get_data: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_data() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData"></value>
        return this._data;
    },
    
    _cropController: null,
    _index: 0,
    
    get_index: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_index() {
        /// <value type="Number" integer="true"></value>
        return this._index;
    },
    set_index: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_index(value) {
        /// <value type="Number" integer="true"></value>
        if (!isNullOrUndefined(this._index)) {
            this._item.removeClass(this._getImageCssClass());
        }
        this._index = value;
        this._item.addClass(this._getImageCssClass());
        this._item.get_jQueryElement().ready(Delegate.create(this, this._updateShadowBoxTag));
        return value;
    },
    
    _getImageCssClass: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_getImageCssClass() {
        /// <returns type="String"></returns>
        return 'image' + this._index;
    },
    
    _initContainer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initContainer() {
        this._item.addClass('cs-media-gallery-item');
    },
    
    _checkScriptErrors: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_checkScriptErrors() {
        if (this._data.canDelete && String.isNullOrEmpty(this._section.get_functionality().get_mediaGallery().get_functionality().get_settings().deleteScript) && !js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_DELETE_SHOWN) {
            js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_DELETE_SHOWN = true;
            alert('Please specify \'deleteScript\' setting in order to handle items');
        }
        if (this._data.canCrop && String.isNullOrEmpty(this._section.get_functionality().get_mediaGallery().get_functionality().get_settings().cropScript) && !js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CROP_SHOWN) {
            js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CROP_SHOWN = true;
            alert('Please specify \'cropScript\' setting in order to handle items');
        }
        if (this._data.canReorder && String.isNullOrEmpty(this._section.get_functionality().get_mediaGallery().get_functionality().get_settings().reorderScript) && !js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_REORDER_SHOWN) {
            js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_REORDER_SHOWN = true;
            alert('Please specify \'reorderScript\' setting in order to handle items');
        }
        if (this._data.canEditCaption && String.isNullOrEmpty(this._section.get_functionality().get_mediaGallery().get_functionality().get_settings().captionScript) && !js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CAPTION_SHOWN) {
            js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CAPTION_SHOWN = true;
            alert('Please specify \'captionScript\' setting in order to handle items');
        }
    },
    
    _updateShadowBoxTag: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_updateShadowBoxTag() {
        if (this.get_section() != null) {
            js.com.cs.v2.Util.jQueryShadowBoxUtil.updateRelTag(this._aThumb.get_domElement(), this._data.caption, this.get_section().get_functionality().get_sectionData().title, this._data.width, this._data.height);
            this._aThumb.set_href(this._data.itemURL);
        }
    },
    
    _initImage: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initImage() {
        this._divImage = new js.com.cs.v2.Controls.Common.MyDivElement();
        this._divImage.addClass('cs-media-gallery-item-image');
        this._aThumb = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        this._imgThumb = new js.com.cs.v2.Controls.Common.MyImageElement();
        this._imgThumb.set_src(this._data.thumbURL);
        this._imgThumb.set_alt(this._data.caption);
        this._aThumb.appendChild(this._imgThumb);
        this._aThumb.set_href(this._data.itemURL);
        this._aThumb.set_target(js.com.cs.v2.Controls.Common.HREF_TARGET.blank);
        this._aThumb.addClass(js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.a_HREF_LINK);
        this._divImage.appendChild(this._aThumb);
        this._item.appendChild(this._divImage);
    },
    
    setupShadowbox: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$setupShadowbox() {
        var opts = {};
        opts.skipSetup = true;
        js.com.cs.v2.Util.jQueryShadowBoxUtil.initShadowBox(opts);
        opts.skipSetup = false;
        var cssSelector = '.' + this._getImageCssClass() + ' a.' + js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.a_HREF_LINK;
        Shadowbox.setup(cssSelector, opts);
    },
    
    _initEditableCaption: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initEditableCaption() {
        /// <summary>
        /// Creates an editable text box on click
        /// </summary>
        if (this._data.canEditCaption && this.get_mediaGallery() != null) {
            var editSettings = {};
            editSettings.name = this.get_mediaGallery().get_functionality().get_settings().captionScriptParamValue;
            editSettings.callback = Delegate.create(this, this._onEditCaptionReady);
            editSettings.onerror = Delegate.create(this, this._onEditCaptionError);
            editSettings.onreset = Delegate.create(this, this._onEditCaptionReset);
            editSettings.onblur = 'submit';
            editSettings.tooltip = this.get_mediaGallery().get_functionality().get_settings().captionOverTooltip;
            editSettings.indicator = this.get_mediaGallery().get_functionality().get_settings().captionUpdateIndicator;
            editSettings.submitdata = {};
            editSettings.submitdata[this.get_section().get_functionality().get_mediaGallery().get_functionality().get_settings().captionScriptParamId] = this.get_data().id;
            this._divCaption.get_jQueryElement().editable(this.get_mediaGallery().get_functionality().get_settings().captionScript, editSettings);
            this._divCaption.add_onMouseEnter(Delegate.create(this, this._divCaption_onMouseOver));
            this._divCaption.add_onMouseLeave(Delegate.create(this, this._divCaption_onMouseLeave));
            this._divCaption.add_onClick(Delegate.create(this, this._divCaption_onClick));
        }
    },
    
    _resetCaptionEditingClass: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_resetCaptionEditingClass() {
        this._divCaption.removeClass('cs-media-gallery-item-caption-editing');
    },
    
    _onEditCaptionReady: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_onEditCaptionReady(value, settings) {
        /// <param name="value" type="String">
        /// </param>
        /// <param name="settings" type="js.com.JQueryScriptSharp._jEditableSettings">
        /// </param>
        this._resetCaptionEditingClass();
    },
    
    _onEditCaptionError: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_onEditCaptionError(settings, original, xhr) {
        /// <param name="settings" type="js.com.JQueryScriptSharp._jEditableSettings">
        /// </param>
        /// <param name="original" type="String">
        /// </param>
        /// <param name="xhr" type="XMLHttpRequest">
        /// </param>
        this._resetCaptionEditingClass();
    },
    
    _onEditCaptionReset: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_onEditCaptionReset(settings, original) {
        /// <param name="settings" type="js.com.JQueryScriptSharp._jEditableSettings">
        /// </param>
        /// <param name="original" type="String">
        /// </param>
        this._resetCaptionEditingClass();
    },
    
    _divCaption_onClick: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_divCaption_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._divCaption.addClass('cs-media-gallery-item-caption-editing');
    },
    
    _divCaption_onMouseLeave: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_divCaption_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._divCaption.removeClass('cs-media-gallery-item-caption-over');
    },
    
    _divCaption_onMouseOver: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_divCaption_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._divCaption.addClass('cs-media-gallery-item-caption-over');
    },
    
    _initCaption: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initCaption() {
        this._divCaption = new js.com.cs.v2.Controls.Common.MyDivElement();
        this._divCaption.addClass('cs-media-gallery-item-caption');
        this._divCaption.set_innerHTML(this._data.caption);
        this._item.appendChild(this._divCaption);
    },
    
    _getButton: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_getButton(css) {
        /// <param name="css" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.Controls.Common.MyAnchorElement"></returns>
        var aBtn = new js.com.cs.v2.Controls.Common.MyAnchorElement();
        aBtn.addClass('cs-media-gallery-item-button');
        aBtn.addClass(css);
        aBtn.set_href('javascript:');
        return aBtn;
    },
    
    _initDelete: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initDelete() {
        this._aDelete = this._getButton('delete');
        this._aDelete.add_onClick(Delegate.create(this, this._aDelete_onClick));
        (this._data.buttons).insert(0, this._aDelete);
    },
    
    _aDelete_onClick: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_aDelete_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._aDelete.remove_onClick(Delegate.create(this, this._aDelete_onClick));
        this.select();
        var settings = this._section.get_functionality().get_mediaGallery().get_functionality().get_settings();
        if (confirm(settings.confirmDeleteMessage)) {
            if (isNullOrUndefined(settings.deleteScriptExtraParams)) {
                settings.deleteScriptExtraParams = {};
            }
            settings.deleteScriptExtraParams[settings.deleteScriptIdParam] = this.get_data().id;
            this._item.setOpacity(0.25);
            jQuery.get(settings.deleteScript, settings.deleteScriptExtraParams, Delegate.create(this, this._deleteResponse), 'json');
        }
        this.unSelect();
    },
    
    _deleteResponse: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_deleteResponse(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var settings = this._section.get_functionality().get_mediaGallery().get_functionality().get_settings();
        var successValue = data[settings.deleteScriptResponseSuccessParam].toString();
        if (successValue.toLowerCase() === settings.deleteScriptResponseSuccessValue.toLowerCase()) {
            var itemID = data[settings.deleteScriptResponseIdParam].toString();
            this._item.slideLeft(1000);
            if (this.__onDelete != null) {
                this.__onDelete.invoke(this._item);
            }
        }
        else {
            alert(settings.deleteItemErrorMessage);
            this._aDelete.add_onClick(Delegate.create(this, this._aDelete_onClick));
        }
    },
    
    _initCrop: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initCrop() {
        if (!isNullOrUndefined(this._data.cropSizes) && this._data.cropSizes.length > 0) {
            this._aCrop = this._getButton('crop');
            this._cropController = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController(this._item, this._aCrop);
            (this._data.buttons).insert(0, this._aCrop);
        }
    },
    
    _initReorder: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initReorder() {
        this._aReorder = this._getButton(js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.csS_BTN_REORDER);
        (this._data.buttons).insert(0, this._aReorder);
    },
    
    _initDefaultButtons: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initDefaultButtons() {
        if (isNullOrUndefined(this._data.buttons)) {
            this._data.buttons = [];
        }
        if (this._data.canDelete) {
            this._initDelete();
        }
        if (this._data.canReorder) {
            this._initReorder();
        }
        if (this._data.canCrop) {
            this._initCrop();
        }
    },
    
    _initButtons: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initButtons() {
        this._initDefaultButtons();
        if (!isNullOrUndefined(this._data.buttons)) {
            if (this._data.buttons.length > 0) {
                this._divButtons = new js.com.cs.v2.Controls.Common.MyDivElement();
                this._divButtons.addClass('cs-media-gallery-item-buttons');
                for (var i = 0; i < this._data.buttons.length; i++) {
                    this._divButtons.appendChild(this._data.buttons[i]);
                }
                this._item.appendChild(this._divButtons);
            }
        }
    },
    
    init: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$init() {
        this._initContainer();
        this._initImage();
        this._initCaption();
        this._initButtons();
    },
    
    initializeFunctionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$initializeFunctionality() {
        /// <summary>
        /// Call this method to initialize Shadowbox once the item is added to DOM and section is set.
        /// This is called from MediaGallerySection when item is added to section.
        /// </summary>
        this._item.get_jQueryElement().ready(Delegate.create(this, this._updateShadowBoxTag));
        this._item.get_jQueryElement().ready(Delegate.create(this, this.setupShadowbox));
        this._checkScriptErrors();
        this._initEditableCaption();
    },
    
    get_mediaGallery: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_mediaGallery() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery"></value>
        if (this._section != null) {
            return this._section.get_functionality().get_mediaGallery();
        }
        else {
            return null;
        }
    },
    
    select: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$select() {
        this._item.addClass('cs-media-gallery-item-selected');
    },
    
    unSelect: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItemFunctionality$unSelect() {
        this._item.removeClass('cs-media-gallery-item-selected');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItem(data) {
    /// <param name="data" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData">
    /// </param>
    /// <field name="_functionality$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality">
    /// </field>
    /// <field name="csS_BTN_REORDER" type="String" static="true">
    /// </field>
    /// <field name="a_HREF_LINK" type="String" static="true">
    /// </field>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.constructBase(this);
    this._functionality$2 = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality(this, data);
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryItem$get_functionality() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality

js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality = function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality(gallery, settings) {
    /// <param name="gallery" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery">
    /// </param>
    /// <param name="settings" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings">
    /// </param>
    /// <field name="_settings" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings">
    /// </field>
    /// <field name="_gallery" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery">
    /// </field>
    /// <field name="_tabs" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs">
    /// </field>
    /// <field name="_divGalleryItemSections" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_sections" type="Array" elementType="MediaGalleryItemSection">
    /// </field>
    this._gallery = gallery;
    this._settings = (settings == null) ? this._getDefaultSettings() : settings;
    this._sections = [];
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality.prototype = {
    _settings: null,
    
    get_settings: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$get_settings() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings"></value>
        return this._settings;
    },
    set_settings: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$set_settings(value) {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings"></value>
        this._settings = value;
        return value;
    },
    
    _gallery: null,
    _tabs: null,
    _divGalleryItemSections: null,
    _sections: null,
    
    get_sections: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$get_sections() {
        /// <value type="Array" elementType="MediaGalleryItemSection"></value>
        return this._sections;
    },
    set_sections: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$set_sections(value) {
        /// <value type="Array" elementType="MediaGalleryItemSection"></value>
        this._sections = value;
        return value;
    },
    
    _initSectionsContainer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$_initSectionsContainer() {
        this._divGalleryItemSections = new js.com.cs.v2.Controls.Common.MyDivElement();
        this._divGalleryItemSections.addClass('cs-media-gallery-sections');
        this._gallery.appendChild(this._divGalleryItemSections);
    },
    
    _initInitialImages: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$_initInitialImages() {
        if (!isNullOrUndefined(this._settings.sections)) {
            for (var i = 0; i < this._settings.sections.length; i++) {
                var sectionData = this._settings.sections[i];
                this.createNewSection(sectionData);
                for (var j = 0; j < sectionData.items.length; j++) {
                    var itemData = sectionData.items[j];
                    this.addItem(itemData, sectionData);
                }
            }
        }
    },
    
    _getDefaultSettings: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$_getDefaultSettings() {
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings"></returns>
        var settings = new js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings();
        settings.sections = [];
        return settings;
    },
    
    _initContainer: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$_initContainer() {
        this._gallery.addClass('cs-media-gallery');
    },
    
    _initTabs: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$_initTabs() {
        this._tabs = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs();
    },
    
    getSectionByID: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$getSectionByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></returns>
        if (isNullOrUndefined(id)) {
            id = '';
        }
        id = id.toLowerCase();
        for (var i = 0; i < this._sections.length; i++) {
            var sectionID = this._sections[i].get_functionality().get_sectionData().id.toLowerCase();
            if (sectionID === id) {
                return this._sections[i];
            }
        }
        return null;
    },
    
    getSectionByTitle: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$getSectionByTitle(title) {
        /// <param name="title" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></returns>
        if (isNullOrUndefined(title)) {
            title = '';
        }
        title = title.toLowerCase();
        for (var i = 0; i < this._sections.length; i++) {
            var sectTitle = this._sections[i].get_functionality().get_sectionData().title.toLowerCase();
            if (sectTitle === title) {
                return this._sections[i];
            }
        }
        return null;
    },
    
    createNewSection: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$createNewSection(sectionData) {
        /// <param name="sectionData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection"></returns>
        var sect = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection(sectionData);
        this._sections[this._sections.length] = sect;
        this._divGalleryItemSections.appendChild(sect);
        this._tabs.get_functionality().addTab(sect);
        sect.get_functionality().set_mediaGallery(this._gallery);
        if (this._sections.length > 1) {
            this._gallery.appendChild(this._tabs);
        }
        return sect;
    },
    
    _checkScriptErrors: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$_checkScriptErrors() {
        return;
        if (String.isNullOrEmpty(this._settings.cropScript)) {
            alert('Please specify \'cropScript\' if you want to crop elements');
        }
        if (String.isNullOrEmpty(this._settings.reorderScript)) {
            alert('Please specify \'reorderScript\' if you want to crop elements');
        }
        if (String.isNullOrEmpty(this._settings.deleteScript)) {
            alert('Please specify \'deleteScript\' if you want to crop elements');
        }
    },
    
    getMediaGalleryItemFromDOMElement: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$getMediaGalleryItemFromDOMElement(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        for (var i = 0; i < this._sections.length; i++) {
            var item = this._sections[i].get_functionality().getMediaGalleryItemFromDOMElement(elem);
            if (item != null) {
                return item;
            }
        }
        return null;
    },
    
    getMediaGalleryItemFromID: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$getMediaGalleryItemFromID(ID) {
        /// <param name="ID" type="String">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        for (var i = 0; i < this._sections.length; i++) {
            var item = this._sections[i].get_functionality().getMediaGalleryItemFromID(ID);
            if (item != null) {
                return item;
            }
        }
        return null;
    },
    
    getMediaGalleryItemFromData: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$getMediaGalleryItemFromData(itemData) {
        /// <param name="itemData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData">
        /// </param>
        /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        if (itemData == null) {
            return null;
        }
        return this.getMediaGalleryItemFromID(itemData.id);
    },
    
    addItem: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$addItem(item, sectionData) {
        /// <param name="item" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem">
        /// </param>
        /// <param name="sectionData" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData">
        /// </param>
        if (!(Type.canCast(item, js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem))) {
            var itemData = item;
            item = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem(itemData);
        }
        var section = this.getSectionByID(sectionData.id);
        if (section == null) {
            section = this.createNewSection(sectionData);
        }
        section.get_functionality().addItem(item);
    },
    
    init: function js_com_cs_v2_UI_MediaGallery_v1_MediaGalleryFunctionality$init() {
        this._initTabs();
        this._initSectionsContainer();
        this._initInitialImages();
        this._initContainer();
        this._tabs.get_functionality().selectInitialTab();
        this._checkScriptErrors();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.MediaGallery.v1.MediaGallery

js.com.cs.v2.UI.MediaGallery.v1.MediaGallery = function js_com_cs_v2_UI_MediaGallery_v1_MediaGallery(cropScript, reorderScript, deleteScript, uploadScript, updateCaptionScript) {
    /// <param name="cropScript" type="String">
    /// </param>
    /// <param name="reorderScript" type="String">
    /// </param>
    /// <param name="deleteScript" type="String">
    /// </param>
    /// <param name="uploadScript" type="String">
    /// </param>
    /// <param name="updateCaptionScript" type="String">
    /// </param>
    /// <field name="_functionality$2" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality">
    /// </field>
    js.com.cs.v2.UI.MediaGallery.v1.MediaGallery.constructBase(this);
    if (!(Type.canCast(cropScript, String))) {
        this._init$2(cropScript);
    }
    else {
        var settings = new js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings();
        settings.cropScript = cropScript;
        settings.reorderScript = reorderScript;
        settings.deleteScript = deleteScript;
        settings.uploadifySettings.script = uploadScript;
        settings.captionScript = updateCaptionScript;
        settings.uploadifySettings.auto = true;
        settings.uploadifySettings.multi = true;
        this._init$2(settings);
    }
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGallery.replaceDomElementWithMediaGallery = function js_com_cs_v2_UI_MediaGallery_v1_MediaGallery$replaceDomElementWithMediaGallery(elementID, settings) {
    /// <param name="elementID" type="String">
    /// </param>
    /// <param name="settings" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings">
    /// </param>
    /// <returns type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallery"></returns>
    var domElem = new js.com.cs.v2.Controls.Common.MyDOMElement(elementID);
    var mg = new js.com.cs.v2.UI.MediaGallery.v1.MediaGallery(settings);
    js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings.updateAlternateContentFromIds(settings.sections);
    domElem.clear();
    domElem.appendChild(mg);
    mg.init();
    return mg;
}
js.com.cs.v2.UI.MediaGallery.v1.MediaGallery.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v2_UI_MediaGallery_v1_MediaGallery$get_functionality() {
        /// <value type="js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality"></value>
        return this._functionality$2;
    },
    
    _init$2: function js_com_cs_v2_UI_MediaGallery_v1_MediaGallery$_init$2(settings) {
        /// <param name="settings" type="js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings">
        /// </param>
        this._functionality$2 = new js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality(this, settings);
    },
    
    init: function js_com_cs_v2_UI_MediaGallery_v1_MediaGallery$init() {
        this._functionality$2.init();
    }
}


Type.createNamespace('js.com.cs.v2.UI.Mouse');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Mouse.MouseAttach

js.com.cs.v2.UI.Mouse.MouseAttach = function js_com_cs_v2_UI_Mouse_MouseAttach(element, position, xOffset, yOffset, strictAttachPosition, canGoOutOfViewport) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="position" type="js.com.cs.v2.Enums.POSITION">
    /// </param>
    /// <param name="xOffset" type="Number" integer="true">
    /// </param>
    /// <param name="yOffset" type="Number" integer="true">
    /// </param>
    /// <param name="strictAttachPosition" type="Boolean">
    /// </param>
    /// <param name="canGoOutOfViewport" type="Boolean">
    /// </param>
    /// <field name="_element" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_attachPosition" type="js.com.cs.v2.Enums.POSITION">
    /// </field>
    /// <field name="_xOffset" type="Number" integer="true">
    /// </field>
    /// <field name="_yOffset" type="Number" integer="true">
    /// </field>
    /// <field name="_strictAttachPosition" type="Boolean">
    /// </field>
    /// <field name="_canGoOutOfViewport" type="Boolean">
    /// </field>
    /// <field name="_attached" type="Boolean">
    /// </field>
    js.com.cs.v2.Util.MouseUtil.init();
    this._element = new js.com.cs.v2.Controls.Common.MyDOMElement(element);
    this._xOffset = xOffset;
    this._yOffset = yOffset;
    this._strictAttachPosition = strictAttachPosition;
    this._canGoOutOfViewport = canGoOutOfViewport;
    this._attachPosition = position;
}
js.com.cs.v2.UI.Mouse.MouseAttach.prototype = {
    _element: null,
    _attachPosition: 0,
    _xOffset: 0,
    _yOffset: 0,
    _strictAttachPosition: false,
    _canGoOutOfViewport: false,
    _attached: false,
    
    _getBasePointForPosition: function js_com_cs_v2_UI_Mouse_MouseAttach$_getBasePointForPosition(pos) {
        /// <param name="pos" type="js.com.cs.v2.Enums.POSITION">
        /// </param>
        /// <returns type="Array" elementType="Number" elementInteger="true"></returns>
        var pts = new Array(2);
        var x = 0;
        var y = 1;
        if (pos === js.com.cs.v2.Enums.POSITION.topRight) {
            pts[x] = 0 + this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() - this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.right) {
            pts[x] = 0 + this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() / 2 + this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.bottomRight) {
            pts[x] = 0 + this._xOffset;
            pts[y] = 0 + this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.bottom) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() / 2 + this._xOffset;
            pts[y] = 0 + this._xOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.bottomLeft) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() - this._xOffset;
            pts[y] = 0 + this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.left) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() - this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() / 2 + this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.topLeft) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() - this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() - this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.top) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() / 2 + this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() - this._yOffset;
        }
        else if (pos === js.com.cs.v2.Enums.POSITION.center) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() / 2 + this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() / 2 + this._yOffset;
        }
        pts[x] += js.com.cs.v2.Util.MouseUtil.get_mouseX();
        pts[y] += js.com.cs.v2.Util.MouseUtil.get_mouseY();
        return pts;
    },
    
    _getBasePoint: function js_com_cs_v2_UI_Mouse_MouseAttach$_getBasePoint() {
        /// <returns type="Array" elementType="Number" elementInteger="true"></returns>
        return this._getBasePointForPosition(this._attachPosition);
    },
    
    _getValidPoint: function js_com_cs_v2_UI_Mouse_MouseAttach$_getValidPoint() {
        /// <returns type="Array" elementType="Number" elementInteger="true"></returns>
        var pt = this._getBasePoint();
        var x = pt[0];
        var y = pt[1];
        var minX = js.com.cs.v2.Util.WindowUtil.getScrollLeft();
        var maxX = js.com.cs.v2.Util.WindowUtil.getViewportWidth(true) + minX;
        var minY = js.com.cs.v2.Util.WindowUtil.getScrollTop();
        var maxY = js.com.cs.v2.Util.WindowUtil.getViewportHeight(true) + minY;
        if (!this._canGoOutOfViewport) {
            if (x < minX) {
                if (this._strictAttachPosition) {
                    x = minX;
                }
                else {
                    x = this._getBasePointForPosition(js.com.cs.v2.Enums.POSITION.right)[0];
                    if (x + this._element.get_jQueryElement().outerWidth(true) > maxX) {
                        x = pt[0];
                    }
                }
            }
            else if (x + this._element.get_jQueryElement().outerWidth(true) > maxX) {
                if (this._strictAttachPosition) {
                    x = maxX - this._element.get_jQueryElement().outerWidth(true);
                }
                else {
                    x = this._getBasePointForPosition(js.com.cs.v2.Enums.POSITION.left)[0];
                    if (x < minX) {
                        x = pt[0];
                    }
                }
            }
            if (y < minY) {
                if (this._strictAttachPosition) {
                    y = minY;
                }
                else {
                    y = this._getBasePointForPosition(js.com.cs.v2.Enums.POSITION.bottom)[1];
                    if (y + this._element.get_jQueryElement().outerHeight(true) > maxY) {
                        y = pt[1];
                    }
                }
            }
            else if (y + this._element.get_jQueryElement().outerHeight(true) > maxY) {
                if (this._strictAttachPosition) {
                    y = maxY - this._element.get_jQueryElement().outerHeight(true);
                }
                else {
                    y = this._getBasePointForPosition(js.com.cs.v2.Enums.POSITION.top)[1];
                    if (y < minY) {
                        y = pt[1];
                    }
                }
            }
        }
        pt[0] = x;
        pt[1] = y;
        return pt;
    },
    
    _mouseMove: function js_com_cs_v2_UI_Mouse_MouseAttach$_mouseMove() {
        var pts = this._getValidPoint();
        var x = pts[0];
        var y = pts[1];
        this._element.get_style().left = x + 'px';
        this._element.get_style().top = y + 'px';
    },
    
    attachWithMouseMove: function js_com_cs_v2_UI_Mouse_MouseAttach$attachWithMouseMove() {
        if (!this._attached) {
            this._attached = true;
            document.body.appendChild(this._element.get_domElement());
            js.com.cs.v2.Util.DOMUtil.get_document().add_onMouseMove(Delegate.create(this, this._body_onMouseMove));
            this._element.get_style().position = 'absolute';
            this._mouseMove();
        }
    },
    
    _body_onMouseMove: function js_com_cs_v2_UI_Mouse_MouseAttach$_body_onMouseMove(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._mouseMove();
    },
    
    detachWithMouseMove: function js_com_cs_v2_UI_Mouse_MouseAttach$detachWithMouseMove(removeFromDOM) {
        /// <param name="removeFromDOM" type="Boolean">
        /// </param>
        if (this._attached) {
            if (removeFromDOM && this._element.get_parent() != null) {
                this._element.get_parent().removeChild(this._element);
            }
            js.com.cs.v2.Util.DOMUtil.get_document().remove_onMouseMove(Delegate.create(this, this._body_onMouseMove));
            this._attached = false;
        }
    }
}


Type.createNamespace('js.com.cs.v2.UI.NavigationMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.NavigationStyle

js.com.cs.v2.UI.NavigationMenu.NavigationStyle = function() { 
    /// <field name="vertical" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="horizontal" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.NavigationMenu.NavigationStyle.prototype = {
    vertical: 1, 
    horizontal: 2
}
js.com.cs.v2.UI.NavigationMenu.NavigationStyle.createEnum('js.com.cs.v2.UI.NavigationMenu.NavigationStyle', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.NavigationDirection

js.com.cs.v2.UI.NavigationMenu.NavigationDirection = function() { 
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.NavigationMenu.NavigationDirection.prototype = {
    left: 1, 
    right: 2
}
js.com.cs.v2.UI.NavigationMenu.NavigationDirection.createEnum('js.com.cs.v2.UI.NavigationMenu.NavigationDirection', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.NavigationMenu

js.com.cs.v2.UI.NavigationMenu.NavigationMenu = function js_com_cs_v2_UI_NavigationMenu_NavigationMenu(navSettings) {
    /// <param name="navSettings" type="js.com.cs.v2.UI.NavigationMenu.NavigationMenuSettings">
    /// </param>
    /// <field name="top" type="Boolean">
    /// </field>
    /// <field name="_navigationMenuRoot" type="jQuery">
    /// </field>
    /// <field name="_navigationStyle" type="js.com.cs.v2.UI.NavigationMenu.NavigationStyle">
    /// </field>
    /// <field name="_navigationDirection" type="js.com.cs.v2.UI.NavigationMenu.NavigationDirection">
    /// </field>
    /// <field name="ulPadding" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_horizontalCenterAlignMenu" type="Boolean">
    /// </field>
    /// <field name="_setTop" type="Boolean">
    /// </field>
    /// <field name="_setDelay" type="Boolean">
    /// </field>
    /// <field name="_slideAnimation" type="Boolean">
    /// </field>
    /// <field name="_firstUL" type="jQuery">
    /// </field>
    /// <field name="_intervalHide" type="Number" integer="true">
    /// </field>
    /// <field name="_lastOut" type="Object" domElement="true">
    /// </field>
    /// <field name="_slideDuration" type="Number" integer="true">
    /// </field>
    this._navigationMenuRoot = navSettings.element.get_jQueryElement();
    this._navigationStyle = navSettings.navStyle;
    this._navigationDirection = navSettings.navDirection;
    this._horizontalCenterAlignMenu = navSettings.horizontalCenterAlignMenu;
    this._setTop = navSettings.setTop;
    this._setDelay = navSettings.setDelay;
    this._slideAnimation = navSettings.setSlideAnimation;
    this._slideDuration = navSettings.slideDuration;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.NavigationMenu.NavigationMenu._styleHorizontalTop = function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_styleHorizontalTop(parentLI, cssValues) {
    /// <param name="parentLI" type="jQuery">
    /// </param>
    /// <param name="cssValues" type="Object">
    /// </param>
    cssValues['left'] = 0;
    cssValues['top'] = -(parentLI.outerHeight(false) * 2);
}
js.com.cs.v2.UI.NavigationMenu.NavigationMenu._styleHorizontal = function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_styleHorizontal(parentLI, cssValues, top, center) {
    /// <param name="parentLI" type="jQuery">
    /// </param>
    /// <param name="cssValues" type="Object">
    /// </param>
    /// <param name="top" type="Boolean">
    /// </param>
    /// <param name="center" type="Boolean">
    /// </param>
    if (top) {
        cssValues['top'] = parentLI.outerHeight(false);
    }
    if (center) {
        var ulChild = js.com.JQueryScriptSharp.jQueryUtil.select('ul', parentLI).eq(0);
        var centralComputation = (ulChild.width() - parentLI.width()) / 2;
        cssValues['left'] = -centralComputation;
    }
    else {
        cssValues['left'] = 0;
    }
}
js.com.cs.v2.UI.NavigationMenu.NavigationMenu._generateCssValues = function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_generateCssValues() {
    /// <returns type="Object"></returns>
    var cssValues = {};
    cssValues['position'] = 'absolute';
    cssValues['margin'] = 0;
    if (js.com.cs.v2.UI.NavigationMenu.NavigationMenu.ulPadding === 0) {
        cssValues['padding'] = 0;
    }
    else {
        cssValues['padding'] = js.com.cs.v2.UI.NavigationMenu.NavigationMenu.ulPadding;
    }
    cssValues['list-style'] = 'none';
    return cssValues;
}
js.com.cs.v2.UI.NavigationMenu.NavigationMenu.prototype = {
    top: false,
    _navigationMenuRoot: null,
    _navigationStyle: 0,
    _navigationDirection: 0,
    _horizontalCenterAlignMenu: false,
    _setTop: false,
    _setDelay: false,
    _slideAnimation: false,
    _firstUL: null,
    _intervalHide: 0,
    _lastOut: null,
    _slideDuration: 0,
    
    _init: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_init() {
        this._initRender();
        this._initAttach();
    },
    
    _initAttach: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_initAttach() {
        this._attachHover();
    },
    
    _attachHover: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_attachHover() {
        var listItems = js.com.JQueryScriptSharp.jQueryUtil.select('li', this._navigationMenuRoot);
        listItems.hover(Delegate.create(this, this._hoverOnCallback), Delegate.create(this, this._hoverOutCallback));
    },
    
    _hoverOnCallback: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_hoverOnCallback(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        Cufon.refresh();;
        this._clearIntervalHide();
        if (this._lastOut != null) {
            var currOver = e.currentTarget;
            var ok = currOver === this._lastOut;
            var elem;
            if (!ok) {
                ok = js.com.cs.v2.Util.DOMUtil.isChildOf(currOver, this._lastOut);
            }
            if (!ok) {
                this._hidePopup();
            }
        }
        var item = (e.currentTarget);
        var firstUL = js.com.JQueryScriptSharp.jQueryUtil.select('ul:first', item);
        var parentLI = firstUL.closest('li').eq(0);
        var firstAnchor = js.com.JQueryScriptSharp.jQueryUtil.select('a:first-child', parentLI).eq(0);
        if (!firstAnchor.hasClass('selected-anchor')) {
            firstAnchor.addClass('selected-anchor');
        }
        parentLI.css('position', 'relative');
        var cssValues = js.com.cs.v2.UI.NavigationMenu.NavigationMenu._generateCssValues();
        this._filterNavigationStyle(parentLI, cssValues);
        firstUL.css(cssValues);
        if (!this._slideAnimation) {
            firstUL.css('display', 'block');
        }
        else {
            firstUL.slideDown(this._slideDuration);
        }
    },
    
    _filterNavigationStyle: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_filterNavigationStyle(parentLI, cssValues) {
        /// <param name="parentLI" type="jQuery">
        /// </param>
        /// <param name="cssValues" type="Object">
        /// </param>
        if (this._navigationStyle === js.com.cs.v2.UI.NavigationMenu.NavigationStyle.vertical) {
            this._vertical(parentLI, cssValues);
        }
        else if (this._navigationStyle === js.com.cs.v2.UI.NavigationMenu.NavigationStyle.horizontal) {
            this._horizontal(parentLI, cssValues);
        }
    },
    
    _vertical: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_vertical(parentLI, cssValues) {
        /// <param name="parentLI" type="jQuery">
        /// </param>
        /// <param name="cssValues" type="Object">
        /// </param>
        this._styleVerticalLeftOrRight(parentLI, cssValues);
    },
    
    _horizontal: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_horizontal(parentLI, cssValues) {
        /// <param name="parentLI" type="jQuery">
        /// </param>
        /// <param name="cssValues" type="Object">
        /// </param>
        if (parentLI.parent().parent('li').length === 0) {
            if (!this.top) {
                js.com.cs.v2.UI.NavigationMenu.NavigationMenu._styleHorizontal(parentLI, cssValues, this._setTop, this._horizontalCenterAlignMenu);
            }
            else if (this.top) {
                js.com.cs.v2.UI.NavigationMenu.NavigationMenu._styleHorizontalTop(parentLI, cssValues);
            }
        }
        else {
            this._styleVerticalLeftOrRight(parentLI, cssValues);
        }
    },
    
    _styleVerticalLeftOrRight: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_styleVerticalLeftOrRight(parentLI, cssValues) {
        /// <param name="parentLI" type="jQuery">
        /// </param>
        /// <param name="cssValues" type="Object">
        /// </param>
        cssValues['top'] = 0;
        if (this._navigationDirection === js.com.cs.v2.UI.NavigationMenu.NavigationDirection.right) {
            cssValues['left'] = parentLI.outerWidth(true);
        }
        else if (this._navigationDirection === js.com.cs.v2.UI.NavigationMenu.NavigationDirection.left) {
            cssValues['left'] = -parentLI.outerWidth(true);
        }
    },
    
    _clearIntervalHide: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_clearIntervalHide() {
        window.clearTimeout(this._intervalHide);
        this._intervalHide = -1;
    },
    
    _hoverOutCallback: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_hoverOutCallback(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._lastOut = e.currentTarget;
        this._clearIntervalHide();
        var item = (e.currentTarget);
        var firstUL = js.com.JQueryScriptSharp.jQueryUtil.select('ul:first', item);
        var parentLI = firstUL.closest('li').eq(0);
        var firstAnchor = js.com.JQueryScriptSharp.jQueryUtil.select('a:first-child', parentLI).eq(0);
        this._firstUL = firstUL;
        this._intervalHide = window.setTimeout(Delegate.create(this, this._hidePopup), (this._setDelay) ? 1000 : 0);
        if (firstAnchor.hasClass('selected-anchor')) {
            firstAnchor.removeClass('selected-anchor');
        }
        Cufon.refresh();;
    },
    
    _hidePopup: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_hidePopup() {
        if (this._slideAnimation) {
            this._firstUL.slideUp(this._slideDuration);
        }
        else {
            this._firstUL.css('display', 'none');
        }
        this._clearIntervalHide();
        this._lastOut = null;
    },
    
    _initRender: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_initRender() {
        this._hideAllChildNodes();
        this._positionUnorderedLists();
    },
    
    _hideAllChildNodes: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_hideAllChildNodes() {
        js.com.JQueryScriptSharp.jQueryUtil.select('ul', this._navigationMenuRoot).css('display', 'none');
    },
    
    _positionUnorderedLists: function js_com_cs_v2_UI_NavigationMenu_NavigationMenu$_positionUnorderedLists() {
        js.com.JQueryScriptSharp.jQueryUtil.select('ul', this._navigationMenuRoot).css('position', 'relative');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.NavigationMenuSettings

js.com.cs.v2.UI.NavigationMenu.NavigationMenuSettings = function js_com_cs_v2_UI_NavigationMenu_NavigationMenuSettings() {
    /// <field name="element" type="js.com.cs.v2.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="navStyle" type="js.com.cs.v2.UI.NavigationMenu.NavigationStyle">
    /// </field>
    /// <field name="navDirection" type="js.com.cs.v2.UI.NavigationMenu.NavigationDirection">
    /// </field>
    /// <field name="horizontalCenterAlignMenu" type="Boolean">
    /// </field>
    /// <field name="setTop" type="Boolean">
    /// </field>
    /// <field name="setDelay" type="Boolean">
    /// </field>
    /// <field name="setSlideAnimation" type="Boolean">
    /// </field>
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.NavigationMenu.NavigationMenuSettings.prototype = {
    element: null,
    navStyle: 0,
    navDirection: 0,
    horizontalCenterAlignMenu: false,
    setTop: true,
    setDelay: true,
    setSlideAnimation: false,
    slideDuration: 0
}


Type.createNamespace('js.com.cs.v2.UI.NavigationMenu.SliderNavigation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton(ulChildren, selected, SlideDuration) {
    /// <param name="ulChildren" type="jQuery">
    /// </param>
    /// <param name="selected" type="Boolean">
    /// </param>
    /// <param name="SlideDuration" type="Number" integer="true">
    /// </param>
    /// <field name="_btnExpand$2" type="String" static="true">
    /// </field>
    /// <field name="_btnCollapse$2" type="String" static="true">
    /// </field>
    /// <field name="_btnDim$2" type="String" static="true">
    /// </field>
    /// <field name="_slideDuration$2" type="Number" integer="true">
    /// </field>
    /// <field name="_ulChildren$2" type="jQuery">
    /// </field>
    /// <field name="_expanded$2" type="Boolean">
    /// </field>
    js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton.constructBase(this);
    this._ulChildren$2 = ulChildren;
    this._expanded$2 = selected;
    this._slideDuration$2 = SlideDuration;
    this.set_cssClass('toggler');
    this._init$2();
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton.prototype = {
    _slideDuration$2: 0,
    _ulChildren$2: null,
    _expanded$2: false,
    
    _initButton$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton$_initButton$2() {
        if (this._ulChildren$2.length > 0) {
            this.add_onClick(Delegate.create(this, this._navigationButton_onClick$2));
            if (!this._expanded$2) {
                this._ulChildren$2.hide();
                this.set_cssClass(js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnExpand$2);
            }
            else {
                this._expand$2();
            }
        }
        else {
            this.set_cssClass(js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnDim$2);
        }
    },
    
    _navigationButton_onClick$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton$_navigationButton_onClick$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._toggle$2();
    },
    
    _toggle$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton$_toggle$2() {
        if (this._expanded$2) {
            this._collapse$2();
        }
        else {
            this._expand$2();
        }
    },
    
    _collapse$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton$_collapse$2() {
        var time = (js.com.cs.v2.Util.GeneralUtil.isIE6()) ? 0 : this._slideDuration$2;
        this._ulChildren$2.slideUp(time);
        this._expanded$2 = false;
        this.set_cssClass(js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnExpand$2);
    },
    
    _expand$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton$_expand$2() {
        var time = (js.com.cs.v2.Util.GeneralUtil.isIE6()) ? 0 : this._slideDuration$2;
        this._ulChildren$2.slideDown(time);
        this._expanded$2 = true;
        this.set_cssClass(js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnCollapse$2);
    },
    
    _init$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_NavigationButton$_init$2() {
        this._initButton$2();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigation

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigation = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_SliderNavigation(navDetails) {
    /// <param name="navDetails" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails">
    /// </param>
    /// <field name="_slideDuration" type="Number" integer="true">
    /// </field>
    /// <field name="_ulElement" type="jQuery">
    /// </field>
    /// <field name="_itemContainer" type="jQuery">
    /// </field>
    /// <field name="_navDetails" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails">
    /// </field>
    this._ulElement = navDetails.unorderedListElement;
    this._slideDuration = navDetails.slideDuration;
    this._navDetails = navDetails;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this.init));
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigation.prototype = {
    _slideDuration: 0,
    _ulElement: null,
    _itemContainer: null,
    _navDetails: null,
    
    init: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_SliderNavigation$init() {
        this._itemContainer = js.com.JQueryScriptSharp.jQueryUtil.select('li', this._ulElement);
        for (var count = 0; count < this._itemContainer.length; count++) {
            var ulChildren = js.com.JQueryScriptSharp.jQueryUtil.select('ul', this._itemContainer.eq(count));
            var btn = new js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton(ulChildren, false, this._navDetails.slideDuration);
            var imageContainer = new js.com.cs.v2.Controls.Common.MyDivElement();
            imageContainer.set_cssClass('nav-image-container');
            imageContainer.appendChild(btn.get_domElement());
            this._itemContainer.eq(count).prepend(imageContainer.get_jQueryElement());
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_SliderNavigationDetails() {
    /// <field name="unorderedListElement" type="jQuery">
    /// </field>
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails.prototype = {
    unorderedListElement: null,
    slideDuration: 0
}


Type.createNamespace('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType = function() { 
    /// <field name="dim" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="expand" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="collapse" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType.prototype = {
    dim: 1, 
    expand: 2, 
    collapse: 3
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType.createEnum('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation(mainUL, navDetails) {
    /// <param name="mainUL" type="jQuery">
    /// </param>
    /// <param name="navDetails" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </param>
    /// <field name="_mainUL" type="jQuery">
    /// </field>
    /// <field name="_rootUL" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList">
    /// </field>
    /// <field name="_navDetails" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </field>
    this._navDetails = navDetails;
    this._mainUL = mainUL;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation.prototype = {
    _mainUL: null,
    _rootUL: null,
    
    get_rootUL: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation$get_rootUL() {
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        return this._rootUL;
    },
    
    _navDetails: null,
    
    _init: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation$_init() {
        this._rootUL = new js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList(this._mainUL, this._navDetails);
    },
    
    selectItemFromListItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation$selectItemFromListItem(listItem, expandParents) {
        /// <param name="listItem" type="Object" domElement="true">
        /// </param>
        /// <param name="expandParents" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._rootUL.selectItemFromListItem(listItem, expandParents);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton() {
    /// <field name="__clickEvent$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationDelegate">
    /// </field>
    js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton.constructBase(this);
    this._setButtonClassAbsolute$2();
    this._attachClick$2();
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton.prototype = {
    
    add_clickEvent: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$add_clickEvent(value) {
        /// <param name="value" type="Function" />
        this.__clickEvent$2 = Delegate.combine(this.__clickEvent$2, value);
    },
    remove_clickEvent: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$remove_clickEvent(value) {
        /// <param name="value" type="Function" />
        this.__clickEvent$2 = Delegate.remove(this.__clickEvent$2, value);
    },
    
    __clickEvent$2: null,
    
    _setButtonClassAbsolute$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$_setButtonClassAbsolute$2() {
        this.get_jQueryElement().css('position', 'absolute');
    },
    
    _attachClick$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$_attachClick$2() {
        this.add_onClick(Delegate.create(this, this._sliderNavigationButton_onClick$2));
    },
    
    _sliderNavigationButton_onClick$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$_sliderNavigationButton_onClick$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.onButtonClick();
    },
    
    onButtonClick: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$onButtonClick() {
        if (this.__clickEvent$2 != null) {
            this.__clickEvent$2.invoke(this);
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationDetails() {
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails.prototype = {
    slideDuration: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem(listItem, navDetails) {
    /// <param name="listItem" type="jQuery">
    /// </param>
    /// <param name="navDetails" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </param>
    /// <field name="__onSelectChildItem$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.OnSelectItemHandler">
    /// </field>
    /// <field name="_expanded$2" type="Boolean">
    /// </field>
    /// <field name="__expanded$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationDelegate">
    /// </field>
    /// <field name="__collapsed$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.NavigationDelegate">
    /// </field>
    /// <field name="_sliderButtonReference$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton">
    /// </field>
    /// <field name="_parent$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList">
    /// </field>
    /// <field name="_li$2" type="jQuery">
    /// </field>
    /// <field name="sliderNavigationChildren" type="jQuery">
    /// </field>
    /// <field name="_child$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList">
    /// </field>
    /// <field name="_navDetails$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </field>
    js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem.constructBase(this, [ listItem ]);
    this._navDetails$2 = navDetails;
    this._li$2 = listItem;
    this._parseChildUL$2();
    this._setChildrenButton$2(listItem);
    this._attachListeners$2();
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem.prototype = {
    
    add_onSelectChildItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$add_onSelectChildItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectChildItem$2 = Delegate.combine(this.__onSelectChildItem$2, value);
    },
    remove_onSelectChildItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$remove_onSelectChildItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectChildItem$2 = Delegate.remove(this.__onSelectChildItem$2, value);
    },
    
    __onSelectChildItem$2: null,
    _expanded$2: false,
    
    add_expanded: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$add_expanded(value) {
        /// <param name="value" type="Function" />
        this.__expanded$2 = Delegate.combine(this.__expanded$2, value);
    },
    remove_expanded: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$remove_expanded(value) {
        /// <param name="value" type="Function" />
        this.__expanded$2 = Delegate.remove(this.__expanded$2, value);
    },
    
    __expanded$2: null,
    
    add_collapsed: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$add_collapsed(value) {
        /// <param name="value" type="Function" />
        this.__collapsed$2 = Delegate.combine(this.__collapsed$2, value);
    },
    remove_collapsed: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$remove_collapsed(value) {
        /// <param name="value" type="Function" />
        this.__collapsed$2 = Delegate.remove(this.__collapsed$2, value);
    },
    
    __collapsed$2: null,
    _sliderButtonReference$2: null,
    _parent$2: null,
    _li$2: null,
    
    get_listItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$get_listItem() {
        /// <value type="jQuery"></value>
        return this._li$2;
    },
    set_listItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$set_listItem(value) {
        /// <value type="jQuery"></value>
        this._li$2 = value;
        return value;
    },
    
    get_ulParent: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$get_ulParent() {
        /// <summary>
        /// Used to store the parent UnorderedList
        /// </summary>
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        return this._parent$2;
    },
    set_ulParent: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$set_ulParent(value) {
        /// <summary>
        /// Used to store the parent UnorderedList
        /// </summary>
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        this._parent$2 = value;
        return value;
    },
    
    sliderNavigationChildren: null,
    _child$2: null,
    
    get_ulChild: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$get_ulChild() {
        /// <summary>
        /// Used to store the child Unordered List
        /// </summary>
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        return this._child$2;
    },
    set_ulChild: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$set_ulChild(value) {
        /// <summary>
        /// Used to store the child Unordered List
        /// </summary>
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        this._child$2 = value;
        return value;
    },
    
    _navDetails$2: null,
    
    _parseChildUL$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_parseChildUL$2() {
        var ul = this._li$2.children('ul');
        if (ul.length > 0) {
            this._child$2 = new js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList(ul, this._navDetails$2);
            this._child$2.set_parentLI(this);
            this._child$2.add_onSelectItem(Delegate.create(this, this._child_OnSelectItem$2));
        }
    },
    
    _child_OnSelectItem$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_child_OnSelectItem$2(Item) {
        /// <param name="Item" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
        /// </param>
        if (this.__onSelectChildItem$2 != null) {
            this.__onSelectChildItem$2.invoke(Item);
        }
    },
    
    _attachListeners$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_attachListeners$2() {
        this._sliderButtonReference$2.add_clickEvent(Delegate.create(this, this._sliderButtonReference_ClickEvent$2));
    },
    
    _sliderButtonReference_ClickEvent$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_sliderButtonReference_ClickEvent$2(sender) {
        /// <param name="sender" type="Object">
        /// </param>
        if (this._expanded$2) {
            this._initCollapse$2();
        }
        else {
            this._initExpand$2();
        }
    },
    
    _initExpand$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_initExpand$2() {
        this._doExpandChildren$2();
        this._expanded$2 = true;
    },
    
    _initCollapse$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_initCollapse$2() {
        this._doCollapseChildren$2();
        this._expanded$2 = false;
    },
    
    _setChildrenButton$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_setChildrenButton$2(listItem) {
        /// <param name="listItem" type="jQuery">
        /// </param>
        if (this.get_ulChild() != null) {
            var sliderButton = new js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton();
            this._sliderButtonReference$2 = sliderButton;
            this._sliderButtonReference$2.set_cssClass('navigation-expand');
            this.get_jQueryElement().prepend(this._sliderButtonReference$2.get_domElement());
            this.get_ulChild().get_jQueryElement().hide();
            this.get_jQueryElement().css('position', 'relative');
            this._expanded$2 = false;
        }
        else {
            var sliderButton = new js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton();
            this._sliderButtonReference$2 = sliderButton;
            this._sliderButtonReference$2.set_cssClass('navigation-dim');
            this.get_jQueryElement().prepend(this._sliderButtonReference$2.get_domElement());
            this.get_jQueryElement().css('position', 'relative');
        }
    },
    
    expandChildren: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$expandChildren() {
        this._initExpand$2();
    },
    
    collapseChildren: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$collapseChildren() {
        this._initCollapse$2();
    },
    
    _doExpandChildren$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_doExpandChildren$2() {
        if (this.get_ulChild() != null) {
            this._sliderButtonReference$2.set_cssClass('navigation-collapse');
            this.get_ulChild().get_jQueryElement().slideDown(this._navDetails$2.slideDuration);
            this.onClickExpand();
        }
    },
    
    _doCollapseChildren$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_doCollapseChildren$2() {
        if (this.get_ulChild() != null) {
            this._sliderButtonReference$2.set_cssClass('navigation-expand');
            this.get_ulChild().get_jQueryElement().slideUp(this._navDetails$2.slideDuration);
            this.onClickCollapse();
        }
    },
    
    onClickExpand: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$onClickExpand() {
        if (this.__expanded$2 != null) {
            this.__expanded$2.invoke(this);
        }
    },
    
    onClickCollapse: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$onClickCollapse() {
        if (this.__collapsed$2 != null) {
            this.__collapsed$2.invoke(this);
        }
    },
    
    selectChildItemFromListItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$selectChildItemFromListItem(listItem, expandParents) {
        /// <param name="listItem" type="Object" domElement="true">
        /// </param>
        /// <param name="expandParents" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        if (this._child$2 != null) {
            return this._child$2.selectItemFromListItem(listItem, expandParents);
        }
        else {
            return false;
        }
    },
    
    selectItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$selectItem(expandParents) {
        /// <param name="expandParents" type="Boolean">
        /// </param>
        this.get_jQueryElement().addClass('selected');
        this.expandChildren();
        if (expandParents) {
            var parentItem = this.get_ulParent().get_parentLI();
            while (parentItem != null) {
                parentItem.expandChildren();
                parentItem = parentItem.get_ulParent().get_parentLI();
            }
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList

js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList = function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList(unorderedList, navDetails) {
    /// <param name="unorderedList" type="jQuery">
    /// </param>
    /// <param name="navDetails" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </param>
    /// <field name="__onSelectItem$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.OnSelectItemHandler">
    /// </field>
    /// <field name="_ul$2" type="jQuery">
    /// </field>
    /// <field name="_parentLI$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
    /// </field>
    /// <field name="_childrenLI$2" type="Array" elementType="SliderNavigationListItem">
    /// </field>
    /// <field name="_navDetails$2" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </field>
    js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList.constructBase(this, [ unorderedList ]);
    this._navDetails$2 = navDetails;
    this._ul$2 = unorderedList;
    this._childrenLI$2 = [];
    this._parseChildren$2();
}
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList.prototype = {
    
    add_onSelectItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$add_onSelectItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectItem$2 = Delegate.combine(this.__onSelectItem$2, value);
    },
    remove_onSelectItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$remove_onSelectItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectItem$2 = Delegate.remove(this.__onSelectItem$2, value);
    },
    
    __onSelectItem$2: null,
    _ul$2: null,
    _parentLI$2: null,
    
    get_parentLI: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$get_parentLI() {
        /// <summary>
        /// Used to store the parent List item
        /// </summary>
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem"></value>
        return this._parentLI$2;
    },
    set_parentLI: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$set_parentLI(value) {
        /// <summary>
        /// Used to store the parent List item
        /// </summary>
        /// <value type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem"></value>
        this._parentLI$2 = value;
        return value;
    },
    
    get_childrenLI: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$get_childrenLI() {
        /// <summary>
        /// Used to store the children list items
        /// </summary>
        /// <value type="Array" elementType="SliderNavigationListItem"></value>
        return this._childrenLI$2;
    },
    set_childrenLI: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$set_childrenLI(value) {
        /// <summary>
        /// Used to store the children list items
        /// </summary>
        /// <value type="Array" elementType="SliderNavigationListItem"></value>
        this._childrenLI$2 = value;
        return value;
    },
    
    _childrenLI$2: null,
    _navDetails$2: null,
    
    _parseChildren$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$_parseChildren$2() {
        var children = this._ul$2.children();
        if (children.length > 0) {
            for (var i = 0; i < children.length; i++) {
                var childLi = children.eq(i);
                var li = new js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem(childLi, this._navDetails$2);
                this.get_childrenLI()[this.get_childrenLI().length] = li;
                li.set_ulParent(this);
                li.add_onSelectChildItem(Delegate.create(this, this._li_OnSelectChildItem$2));
            }
        }
    },
    
    _li_OnSelectChildItem$2: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$_li_OnSelectChildItem$2(Item) {
        /// <param name="Item" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
        /// </param>
        if (this.__onSelectItem$2 != null) {
            this.__onSelectItem$2.invoke(Item);
        }
    },
    
    addChild: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$addChild(child) {
        /// <summary>
        /// Add a child to the unordered list
        /// </summary>
        /// <param name="child" type="js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
        /// Child reference
        /// </param>
        this.get_childrenLI()[this.get_childrenLI().length] = child;
    },
    
    selectItemFromListItem: function js_com_cs_v2_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$selectItemFromListItem(listItem, expandParents) {
        /// <param name="listItem" type="Object" domElement="true">
        /// </param>
        /// <param name="expandParents" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        var found = false;
        for (var i = 0; i < this.get_childrenLI().length; i++) {
            var item = this.get_childrenLI()[i];
            if (item.get_listItem().get(0) === listItem) {
                item.selectItem(expandParents);
                found = true;
                if (this.__onSelectItem$2 != null) {
                    this.__onSelectItem$2.invoke(item);
                }
            }
            else {
                found = item.selectChildItemFromListItem(listItem, expandParents);
            }
            if (found) {
                return found;
            }
        }
        return false;
    }
}


Type.createNamespace('js.com.cs.v2.UI.PopUpMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.PopUpMenu.MenuItem

js.com.cs.v2.UI.PopUpMenu.MenuItem = function js_com_cs_v2_UI_PopUpMenu_MenuItem(divItem, menuLevel, popUpMenu) {
    /// <param name="divItem" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </param>
    /// <param name="menuLevel" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </param>
    /// <param name="popUpMenu" type="js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass">
    /// </param>
    /// <field name="_div" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="menuLevel" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </field>
    /// <field name="_popUpMenu" type="js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass">
    /// </field>
    /// <field name="subMenu" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </field>
    this._div = divItem;
    this.menuLevel = menuLevel;
    this._popUpMenu = popUpMenu;
    this.subMenu = null;
    this._init();
}
js.com.cs.v2.UI.PopUpMenu.MenuItem.prototype = {
    _div: null,
    menuLevel: null,
    _popUpMenu: null,
    subMenu: null,
    
    _initSubMenu: function js_com_cs_v2_UI_PopUpMenu_MenuItem$_initSubMenu() {
        this._div.get_style().position = 'relative';
        this.positionSubMenu();
    },
    
    positionSubMenu: function js_com_cs_v2_UI_PopUpMenu_MenuItem$positionSubMenu() {
        if (this.subMenu != null) {
            var div = this.subMenu.div;
            var x = div.get_jQueryElement().outerWidth(false);
            if (this._popUpMenu.openLeft) {
                x = -x;
            }
            div.get_style().left = x + 'px';
            div.get_style().top = '0px';
        }
    },
    
    _initHandlers: function js_com_cs_v2_UI_PopUpMenu_MenuItem$_initHandlers() {
        this._div.add_onMouseOver(Delegate.create(this, function(e) {
            this._popUpMenu.mouseOverDiv(this);
        }));
        this._div.add_onMouseOut(Delegate.create(this, function(e) {
            this._popUpMenu.mouseOutDiv(this);
        }));
    },
    
    _init: function js_com_cs_v2_UI_PopUpMenu_MenuItem$_init() {
        var objDivs = js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass.getDivs(this._div);
        if (objDivs == null) {
        }
        else {
            this._div = objDivs.divTitle;
            this.subMenu = new js.com.cs.v2.UI.PopUpMenu.MenuLevel(objDivs.divSubMenu, this.menuLevel, this, this._popUpMenu);
            this._initSubMenu();
        }
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.PopUpMenu.MenuLevel

js.com.cs.v2.UI.PopUpMenu.MenuLevel = function js_com_cs_v2_UI_PopUpMenu_MenuLevel(divLevel, parentLevel, openOnMenuItem, popUpMenu) {
    /// <param name="divLevel" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </param>
    /// <param name="parentLevel" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </param>
    /// <param name="openOnMenuItem" type="js.com.cs.v2.UI.PopUpMenu.MenuItem">
    /// </param>
    /// <param name="popUpMenu" type="js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass">
    /// </param>
    /// <field name="_openOnMenuItem" type="js.com.cs.v2.UI.PopUpMenu.MenuItem">
    /// </field>
    /// <field name="_parentLevel" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </field>
    /// <field name="_popUpMenu" type="js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass">
    /// </field>
    /// <field name="menuItems" type="Array" elementType="MenuItem">
    /// </field>
    /// <field name="div" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divs" type="Array" elementType="MyDivElement">
    /// </field>
    /// <field name="currOpenedLevel" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </field>
    this.div = divLevel;
    this._openOnMenuItem = openOnMenuItem;
    this._parentLevel = parentLevel;
    this._popUpMenu = popUpMenu;
    this.menuItems = [];
    this._divs = [];
    this._init();
}
js.com.cs.v2.UI.PopUpMenu.MenuLevel.prototype = {
    _openOnMenuItem: null,
    _parentLevel: null,
    _popUpMenu: null,
    menuItems: null,
    div: null,
    _divs: null,
    currOpenedLevel: null,
    
    _makeSubMenusAbsolute: function js_com_cs_v2_UI_PopUpMenu_MenuLevel$_makeSubMenusAbsolute() {
        for (var i = 0; i < this.div.get_domElement().childNodes.length; i++) {
            var node = this.div.get_domElement().childNodes[i];
            if (!isNullOrUndefined(node.tagName) && node.tagName.toLowerCase() === 'div') {
                var divItem = new js.com.cs.v2.Controls.Common.MyDivElement(node);
                this._divs[this._divs.length] = divItem;
                var objInnerDivs = js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass.getDivs(divItem);
                if (objInnerDivs != null) {
                    divItem.get_style().position = 'relative';
                    objInnerDivs.divSubMenu.get_style().position = 'absolute';
                }
            }
        }
    },
    
    _parseChildDivs: function js_com_cs_v2_UI_PopUpMenu_MenuLevel$_parseChildDivs() {
        for (var i = 0; i < this._divs.length; i++) {
            var div = this._divs[i];
            this.menuItems[this.menuItems.length] = new js.com.cs.v2.UI.PopUpMenu.MenuItem(div, this, this._popUpMenu);
        }
    },
    
    hideSubMenu: function js_com_cs_v2_UI_PopUpMenu_MenuLevel$hideSubMenu() {
        if (this.currOpenedLevel != null) {
            this.currOpenedLevel.hide();
            this.currOpenedLevel = null;
        }
    },
    
    show: function js_com_cs_v2_UI_PopUpMenu_MenuLevel$show() {
        this._openOnMenuItem.positionSubMenu();
        this._parentLevel.currOpenedLevel = this;
        this.div.get_style().display = '';
        this._popUpMenu.callOnMenuOpen(this.div);
    },
    
    hide: function js_com_cs_v2_UI_PopUpMenu_MenuLevel$hide() {
        this.hideSubMenu();
        this.div.get_style().display = 'none';
        this._popUpMenu.callOnMenuClose(this.div);
    },
    
    _init: function js_com_cs_v2_UI_PopUpMenu_MenuLevel$_init() {
        this._makeSubMenusAbsolute();
        this._parseChildDivs();
        this.hide();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass

js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass = function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass(divID, closeTimeout, openLeft, openDelay) {
    /// <param name="divID" type="String">
    /// </param>
    /// <param name="closeTimeout" type="Number" integer="true">
    /// </param>
    /// <param name="openLeft" type="Boolean">
    /// </param>
    /// <param name="openDelay" type="Number" integer="true">
    /// </param>
    /// <field name="_div" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_openDelay" type="Number" integer="true">
    /// </field>
    /// <field name="openLeft" type="Boolean">
    /// </field>
    /// <field name="_closeTimeout" type="Number" integer="true">
    /// </field>
    /// <field name="_openDelayTimeoutID" type="Number" integer="true">
    /// </field>
    /// <field name="__onMenuOpen" type="js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass_MenuOpenClose_Delegate">
    /// </field>
    /// <field name="__onMenuClose" type="js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass_MenuOpenClose_Delegate">
    /// </field>
    /// <field name="_callOutTimeoutID" type="Number" integer="true">
    /// </field>
    /// <field name="_callOut" type="Boolean">
    /// </field>
    /// <field name="_rootMenuLevel" type="js.com.cs.v2.UI.PopUpMenu.MenuLevel">
    /// </field>
    if (isNullOrUndefined(openDelay)) {
        openDelay = 100;
    }
    if (isNullOrUndefined(closeTimeout)) {
        closeTimeout = 50;
    }
    this._div = new js.com.cs.v2.Controls.Common.MyDivElement(divID);
    this._openDelay = openDelay;
    this._closeTimeout = closeTimeout;
    this.openLeft = openLeft;
    this._init();
}
js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass.getDivs = function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$getDivs(div) {
    /// <param name="div" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </param>
    /// <returns type="js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass"></returns>
    var obj = new js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass();
    for (var i = 0; i < div.get_domElement().childNodes.length; i++) {
        var node = div.get_domElement().childNodes[i];
        if (!isNullOrUndefined(node.tagName) && node.tagName.toLowerCase() === 'div') {
            if (obj.divTitle == null) {
                obj.divTitle = new js.com.cs.v2.Controls.Common.MyDivElement(node);
            }
            else {
                obj.divSubMenu = new js.com.cs.v2.Controls.Common.MyDivElement(node);
                break;
            }
        }
    }
    if (obj.divTitle == null && obj.divSubMenu == null) {
        return null;
    }
    else {
        if (obj.divTitle == null || obj.divSubMenu == null) {
            var errMsg = 'Error: js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass\n\n';
            errMsg += 'There is an error in the structure of one of the submenus.\n';
            errMsg += 'You need to have the following structure for a submenu:\n';
            errMsg += '<div>\n\t<div>\n\t\tTITLE HERE\n\t</div>\n\t<div {MAIN MENU DIV}>\n\t</div>\n<div>';
            errMsg += '-----------------------------\n';
            errMsg += 'Error found in the following div HTML code:\n';
            errMsg += div.get_innerHTML();
            alert(errMsg);
            return null;
        }
        else {
            return obj;
        }
    }
}
js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass.prototype = {
    _div: null,
    _openDelay: 100,
    openLeft: true,
    _closeTimeout: 50,
    _openDelayTimeoutID: 0,
    
    add_onMenuOpen: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$add_onMenuOpen(value) {
        /// <param name="value" type="Function" />
        this.__onMenuOpen = Delegate.combine(this.__onMenuOpen, value);
    },
    remove_onMenuOpen: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$remove_onMenuOpen(value) {
        /// <param name="value" type="Function" />
        this.__onMenuOpen = Delegate.remove(this.__onMenuOpen, value);
    },
    
    __onMenuOpen: null,
    
    add_onMenuClose: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$add_onMenuClose(value) {
        /// <param name="value" type="Function" />
        this.__onMenuClose = Delegate.combine(this.__onMenuClose, value);
    },
    remove_onMenuClose: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$remove_onMenuClose(value) {
        /// <param name="value" type="Function" />
        this.__onMenuClose = Delegate.remove(this.__onMenuClose, value);
    },
    
    __onMenuClose: null,
    
    callOnMenuOpen: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$callOnMenuOpen(div) {
        /// <param name="div" type="js.com.cs.v2.Controls.Common.MyDivElement">
        /// </param>
        if (this.__onMenuOpen != null) {
            this.__onMenuOpen.invoke(div);
        }
    },
    
    callOnMenuClose: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$callOnMenuClose(div) {
        /// <param name="div" type="js.com.cs.v2.Controls.Common.MyDivElement">
        /// </param>
        if (this.__onMenuClose != null) {
            this.__onMenuClose.invoke(div);
        }
    },
    
    _callOutTimeoutID: 0,
    _callOut: false,
    _rootMenuLevel: null,
    
    mouseOverDiv: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$mouseOverDiv(menuItem) {
        /// <param name="menuItem" type="js.com.cs.v2.UI.PopUpMenu.MenuItem">
        /// </param>
        window.clearTimeout(this._callOutTimeoutID);
        menuItem.menuLevel.hideSubMenu();
        if (menuItem.subMenu != null) {
            if (this._openDelayTimeoutID > 0) {
                window.clearTimeout(this._openDelayTimeoutID);
            }
            this._openDelayTimeoutID = window.setTimeout(Delegate.create(this, function() {
                this._openDelayTimeoutID = 0;
                menuItem.subMenu.show();
            }), this._openDelay);
        }
    },
    
    mouseOutDiv: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$mouseOutDiv(menuItem) {
        /// <param name="menuItem" type="Object">
        /// </param>
        window.clearTimeout(this._callOutTimeoutID);
        this._callOutTimeoutID = window.setTimeout(Delegate.create(this, this._triggerOut), this._closeTimeout);
        if (this._openDelayTimeoutID > 0) {
            window.clearTimeout(this._openDelayTimeoutID);
        }
    },
    
    _triggerOut: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$_triggerOut() {
        this._rootMenuLevel.hideSubMenu();
    },
    
    _init: function js_com_cs_v2_UI_PopUpMenu_PopUpMenuClass$_init() {
        var prevDisplay = this._div.get_style().display;
        this._rootMenuLevel = new js.com.cs.v2.UI.PopUpMenu.MenuLevel(this._div, null, null, this);
        this._div.get_style().display = prevDisplay;
    }
}


Type.createNamespace('js.com.cs.v2.UI.PopUpMenu.Helpers');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass

js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass = function js_com_cs_v2_UI_PopUpMenu_Helpers_GetDivReturnClass() {
    /// <field name="divSubMenu" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="divTitle" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
}
js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass.prototype = {
    divSubMenu: null,
    divTitle: null
}


Type.createNamespace('js.com.cs.v2.UI.Scroller');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Scroller.AnimDirection

js.com.cs.v2.UI.Scroller.AnimDirection = function() { 
    /// <field name="leftToRight" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="rightToLeft" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.Scroller.AnimDirection.prototype = {
    leftToRight: 1, 
    rightToLeft: 2
}
js.com.cs.v2.UI.Scroller.AnimDirection.createEnum('js.com.cs.v2.UI.Scroller.AnimDirection', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Scroller.AnimScrollType

js.com.cs.v2.UI.Scroller.AnimScrollType = function() { 
    /// <field name="animateX" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="animateY" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.Scroller.AnimScrollType.prototype = {
    animateX: 1, 
    animateY: 2
}
js.com.cs.v2.UI.Scroller.AnimScrollType.createEnum('js.com.cs.v2.UI.Scroller.AnimScrollType', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS

js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS = function js_com_cs_v2_UI_Scroller_FIX_VERTICAL_POSITION_PARAMETERS() {
    /// <field name="bottomScrollContainer" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// The container to calculate the bottom offset (since it can vary due to its height)
    /// </field>
    /// <field name="bottomScrollOffset" type="Number" integer="true">
    /// Extra offset with container
    /// </field>
    /// <field name="topScrollOffset" type="Number" integer="true">
    /// Extra offset with container
    /// </field>
}
js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS.prototype = {
    bottomScrollContainer: null,
    bottomScrollOffset: 0,
    topScrollOffset: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Scroller.FixVerticalPosition

js.com.cs.v2.UI.Scroller.FixVerticalPosition = function js_com_cs_v2_UI_Scroller_FixVerticalPosition(domElem, parameters) {
    /// <summary>
    /// A vertical scroller which will scroll an element to keep hooked in place.  The top offset is calculated
    /// with respect to the element's parent.  The bottom offset is calculated from the element provided.
    /// </summary>
    /// <param name="domElem" type="Object" domElement="true">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS">
    /// </param>
    /// <field name="_elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_params" type="js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS">
    /// </field>
    /// <field name="_divTest" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    this._elem = new js.com.cs.v2.Controls.Common.MyDOMElement(domElem);
    this._params = parameters;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(this, this._init));
}
js.com.cs.v2.UI.Scroller.FixVerticalPosition.prototype = {
    _elem: null,
    _params: null,
    _divTest: null,
    
    _initHandlers: function js_com_cs_v2_UI_Scroller_FixVerticalPosition$_initHandlers() {
        js.com.cs.v2.Util.WindowUtil.add_onScroll(Delegate.create(this, this._windowUtil_OnScroll));
    },
    
    _setRelativePosition: function js_com_cs_v2_UI_Scroller_FixVerticalPosition$_setRelativePosition() {
        /// <summary>
        /// Set relative position of element so that it will keep occupying its own space, just move up and down
        /// </summary>
        var pos = this._elem.get_jQueryElement().position();
        this._elem.get_jQueryElement().css('position', 'relative');
    },
    
    updatePosition: function js_com_cs_v2_UI_Scroller_FixVerticalPosition$updatePosition() {
        /// <summary>
        /// Update the position based on the current scroll
        /// </summary>
        var scrollTop = js.com.cs.v2.Util.WindowUtil.getScrollTop();
        var topPos = 0;
        var topScrollAmount = this._elem.get_parent().get_jQueryElement().position().top + this._params.topScrollOffset;
        var bottomSize = 0;
        if (this._params.bottomScrollContainer != null) {
            bottomSize = this._params.bottomScrollContainer.get_jQueryElement().outerHeight();
        }
        bottomSize += this._params.bottomScrollOffset;
        var maxBottom = js.com.cs.v2.Util.WindowUtil.getPageHeight() - bottomSize;
        if (scrollTop < topScrollAmount) {
            topPos = 0;
        }
        else if (scrollTop + this._elem.get_jQueryElement().outerHeight() > maxBottom) {
            topPos = maxBottom - topScrollAmount - this._elem.get_jQueryElement().outerHeight();
        }
        else {
            topPos = scrollTop - topScrollAmount;
        }
        this._elem.get_jQueryElement().css('top', topPos);
    },
    
    _windowUtil_OnScroll: function js_com_cs_v2_UI_Scroller_FixVerticalPosition$_windowUtil_OnScroll(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this.updatePosition();
    },
    
    _init: function js_com_cs_v2_UI_Scroller_FixVerticalPosition$_init() {
        this._setRelativePosition();
        this._initHandlers();
        window.setTimeout(Delegate.create(this, this.updatePosition), 500);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Scroller.ItemScroller

js.com.cs.v2.UI.Scroller.ItemScroller = function js_com_cs_v2_UI_Scroller_ItemScroller(containerDiv, animationDirection, animationScrollX, refreshRateMilliseconds, AlignLeft) {
    /// <param name="containerDiv" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </param>
    /// <param name="animationDirection" type="js.com.cs.v2.UI.Scroller.AnimDirection">
    /// </param>
    /// <param name="animationScrollX" type="Boolean">
    /// </param>
    /// <param name="refreshRateMilliseconds" type="Number" integer="true">
    /// </param>
    /// <param name="AlignLeft" type="Boolean">
    /// </param>
    /// <field name="_parentContainerElement" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_childElements" type="jQuery">
    /// </field>
    /// <field name="_movementDistanceInPx" type="Number" integer="true">
    /// </field>
    /// <field name="_intervalValue" type="Number" integer="true">
    /// </field>
    /// <field name="_animationDirection" type="js.com.cs.v2.UI.Scroller.AnimDirection">
    /// </field>
    /// <field name="_animationScrollX" type="Boolean">
    /// </field>
    /// <field name="_refreshRateMilliseconds" type="Number" integer="true">
    /// </field>
    /// <field name="_count" type="Number" integer="true">
    /// </field>
    /// <field name="_alignLeft" type="Boolean">
    /// </field>
    /// <field name="_initialOffset" type="Number" integer="true">
    /// </field>
    if (isNullOrUndefined(AlignLeft)) {
        AlignLeft = false;
    }
    else {
        this._alignLeft = AlignLeft;
    }
    this._parentContainerElement = containerDiv;
    this._animationDirection = animationDirection;
    this._refreshRateMilliseconds = refreshRateMilliseconds;
    this._animationScrollX = animationScrollX;
    this._childElements = this._getChildElements();
}
js.com.cs.v2.UI.Scroller.ItemScroller.prototype = {
    _parentContainerElement: null,
    _childElements: null,
    _movementDistanceInPx: 1,
    _intervalValue: 0,
    _animationDirection: 0,
    _animationScrollX: false,
    _refreshRateMilliseconds: 0,
    _count: 0,
    _alignLeft: false,
    _initialOffset: 0,
    
    get_initialOffset: function js_com_cs_v2_UI_Scroller_ItemScroller$get_initialOffset() {
        /// <summary>
        /// The offset to start from when animataing elements
        /// </summary>
        /// <value type="Number" integer="true"></value>
        return this._initialOffset;
    },
    set_initialOffset: function js_com_cs_v2_UI_Scroller_ItemScroller$set_initialOffset(value) {
        /// <summary>
        /// The offset to start from when animataing elements
        /// </summary>
        /// <value type="Number" integer="true"></value>
        this._initialOffset = value;
        return value;
    },
    
    get_animationDirection: function js_com_cs_v2_UI_Scroller_ItemScroller$get_animationDirection() {
        /// <value type="js.com.cs.v2.UI.Scroller.AnimDirection"></value>
        return this._animationDirection;
    },
    set_animationDirection: function js_com_cs_v2_UI_Scroller_ItemScroller$set_animationDirection(value) {
        /// <value type="js.com.cs.v2.UI.Scroller.AnimDirection"></value>
        this._animationDirection = value;
        return value;
    },
    
    get_refreshRateMilliseconds: function js_com_cs_v2_UI_Scroller_ItemScroller$get_refreshRateMilliseconds() {
        /// <value type="Number" integer="true"></value>
        return this._refreshRateMilliseconds;
    },
    set_refreshRateMilliseconds: function js_com_cs_v2_UI_Scroller_ItemScroller$set_refreshRateMilliseconds(value) {
        /// <value type="Number" integer="true"></value>
        this._refreshRateMilliseconds = value;
        return value;
    },
    
    init: function js_com_cs_v2_UI_Scroller_ItemScroller$init() {
        this._initAnimation();
    },
    
    _getChildElements: function js_com_cs_v2_UI_Scroller_ItemScroller$_getChildElements() {
        /// <returns type="jQuery"></returns>
        return this._parentContainerElement.get_jQueryElement().children();
    },
    
    canAnimate: function js_com_cs_v2_UI_Scroller_ItemScroller$canAnimate() {
        /// <returns type="Boolean"></returns>
        return (this._animationScrollX) ? (this._getCombinedWidthOfChildElements() > this._getWidthOfParentElement()) : (this._getCombinedHeightOfChildElements() > this._getHeightOfParentElement());
    },
    
    _initCSS: function js_com_cs_v2_UI_Scroller_ItemScroller$_initCSS() {
        this._childElements.css('position', 'absolute');
    },
    
    _updatePositions: function js_com_cs_v2_UI_Scroller_ItemScroller$_updatePositions() {
        var xPos = 0;
        if (this.canAnimate()) {
            this._parentContainerElement.add_onMouseOver(Delegate.create(this, this._parentContainerElement_onMouseOver));
            this._parentContainerElement.add_onMouseOut(Delegate.create(this, this._parentContainerElement_onMouseOut));
            var offset;
            if (this.get_animationDirection() === js.com.cs.v2.UI.Scroller.AnimDirection.leftToRight) {
                offset = this._getCombinedWidthOfChildElements() - this._getWidthOfParentElement();
                xPos = -offset;
                if (!this._animationScrollX) {
                    offset = this._getCombinedHeightOfChildElements() - this._getHeightOfParentElement();
                    xPos = -offset;
                }
            }
            xPos += this.get_initialOffset();
        }
        else {
            if (!this._alignLeft) {
                if (this._animationScrollX) {
                    xPos = (this._getWidthOfParentElement() - this._getCombinedWidthOfChildElements()) / 2;
                }
                else {
                    xPos = (this._getHeightOfParentElement() - this._getCombinedHeightOfChildElements()) / 2;
                }
            }
            else {
                xPos = -10;
            }
        }
        var count = 0;
        for (var i = 0; i < this._childElements.length; i++) {
            var elem = this._childElements.eq(i);
            if (this._checkLTRWithScrollX() && count === 0) {
                xPos += elem.outerWidth(true);
            }
            elem.css((this._animationScrollX) ? 'left' : 'top', xPos);
            xPos += (this._animationScrollX) ? elem.outerWidth(true) : elem.outerHeight(true);
            count++;
        }
    },
    
    _parentContainerElement_onMouseOut: function js_com_cs_v2_UI_Scroller_ItemScroller$_parentContainerElement_onMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        this._beginAnimation();
    },
    
    _parentContainerElement_onMouseOver: function js_com_cs_v2_UI_Scroller_ItemScroller$_parentContainerElement_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        window.clearInterval(this._intervalValue);
    },
    
    _initAnimation: function js_com_cs_v2_UI_Scroller_ItemScroller$_initAnimation() {
        this._initCSS();
        this._updatePositions();
        if (this.canAnimate()) {
            this._beginAnimation();
        }
    },
    
    _beginAnimation: function js_com_cs_v2_UI_Scroller_ItemScroller$_beginAnimation() {
        this._intervalValue = window.setInterval(Delegate.create(this, this._animate), this.get_refreshRateMilliseconds());
    },
    
    _animate: function js_com_cs_v2_UI_Scroller_ItemScroller$_animate() {
        var incrementation = this._movementDistanceInPx;
        incrementation = this._adjustIncrementation(incrementation);
        this._updateChildrenPosition(incrementation);
    },
    
    _updateChildrenPosition: function js_com_cs_v2_UI_Scroller_ItemScroller$_updateChildrenPosition(incrementation) {
        /// <param name="incrementation" type="Number" integer="true">
        /// </param>
        var currentElement;
        for (var count = 0; count < this._childElements.length; count++) {
            currentElement = this._childElements.eq(count);
            var currentPosition = (this._animationScrollX) ? currentElement.position().left : currentElement.position().top;
            var newPosition = currentPosition + incrementation;
            currentElement.css((this._animationScrollX) ? 'left' : 'top', newPosition + 'px');
        }
        for (var count = 0; count < this._childElements.length; count++) {
            currentElement = this._childElements.eq(count);
            this._checkElementBounds(currentElement);
        }
    },
    
    _getFurthestPosition: function js_com_cs_v2_UI_Scroller_ItemScroller$_getFurthestPosition() {
        /// <returns type="Number" integer="true"></returns>
        var pos = 0;
        for (var i = 0; i < this._childElements.length; i++) {
            var elem = this._childElements.eq(i);
            var margin = this._getMargin(elem);
            if (i === 0) {
                if (this._checkLTRWithScrollX()) {
                    pos = elem.position().left - margin;
                }
                if (this._checkLTRWithScrollY()) {
                    pos = elem.position().top - margin;
                }
                if (this._checkRTLWithScrollX()) {
                    pos = elem.position().left + elem.outerWidth(true);
                }
                if (this._checkRTLWithScrollY()) {
                    pos = elem.position().top + elem.outerHeight(true);
                }
            }
            else {
                if (this._checkLTRWithScrollX()) {
                    pos = Math.min(pos, elem.position().left - margin);
                }
                if (this._checkLTRWithScrollY()) {
                    pos = Math.min(pos, elem.position().top - margin);
                }
                if (this._checkRTLWithScrollX()) {
                    pos = Math.max(pos, elem.position().left + elem.outerWidth(true));
                }
                if (this._checkRTLWithScrollY()) {
                    pos = Math.max(pos, elem.position().top + elem.outerHeight(true));
                }
            }
        }
        return pos;
    },
    
    _getMargin: function js_com_cs_v2_UI_Scroller_ItemScroller$_getMargin(elem) {
        /// <param name="elem" type="jQuery">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        if (this._checkLTRWithScrollX()) {
            return Number.parse(elem.css('margin-left'));
        }
        if (this._checkRTLWithScrollX()) {
            return Number.parse(elem.css('margin-right'));
        }
        if (this._checkLTRWithScrollY()) {
            return Number.parse(elem.css('margin-top'));
        }
        if (this._checkRTLWithScrollY()) {
            return Number.parse(elem.css('margin-bottom'));
        }
        return 0;
    },
    
    _checkRTLWithScrollY: function js_com_cs_v2_UI_Scroller_ItemScroller$_checkRTLWithScrollY() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v2.UI.Scroller.AnimDirection.rightToLeft && (!this._animationScrollX);
    },
    
    _moveToOtherSide: function js_com_cs_v2_UI_Scroller_ItemScroller$_moveToOtherSide(elem) {
        /// <param name="elem" type="jQuery">
        /// </param>
        var furthestPos = this._getFurthestPosition();
        var newPos = 0;
        var margin;
        if (this._checkLTRWithScrollX()) {
            newPos = furthestPos - elem.outerWidth();
        }
        if (this._checkLTRWithScrollY()) {
            newPos = furthestPos - elem.outerHeight();
        }
        if (this._checkRTLWithScrollX()) {
            margin = Number.parse(elem.css('margin-left'));
            newPos = furthestPos + margin;
        }
        if (this._checkRTLWithScrollY()) {
            margin = Number.parse(elem.css('margin-top'));
            newPos = furthestPos + margin;
        }
        elem.css((this._animationScrollX) ? 'left' : 'top', newPos);
    },
    
    _checkElementBounds: function js_com_cs_v2_UI_Scroller_ItemScroller$_checkElementBounds(currentElement) {
        /// <param name="currentElement" type="jQuery">
        /// </param>
        var positionOnBorder = 0;
        if (this._checkLTRWithScrollY()) {
            if (currentElement.position().top > this._getHeightOfParentElement()) {
                this._count++;
                this._moveToOtherSide(currentElement);
            }
        }
        if (this._checkLTRWithScrollX()) {
            if (currentElement.position().left - currentElement.outerWidth() > this._getWidthOfParentElement()) {
                this._count++;
                this._moveToOtherSide(currentElement);
            }
        }
        if (this._checkRTLWithScrollX()) {
            if ((currentElement.position().left + currentElement.outerWidth()) < positionOnBorder) {
                this._count++;
                this._moveToOtherSide(currentElement);
            }
        }
        if (this._checkRTLWithScrollY()) {
            if (currentElement.position().top + currentElement.outerHeight() < positionOnBorder) {
                this._count++;
                this._moveToOtherSide(currentElement);
            }
        }
    },
    
    _getPositionOnBorder: function js_com_cs_v2_UI_Scroller_ItemScroller$_getPositionOnBorder(currentElement, positionOnBorder) {
        /// <param name="currentElement" type="jQuery">
        /// </param>
        /// <param name="positionOnBorder" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        if (this._checkLTRWithScrollX()) {
            positionOnBorder = this._parentContainerElement.get_jQueryElement().width() + currentElement.outerWidth();
        }
        if (this._checkLTRWithScrollY()) {
            positionOnBorder = this._parentContainerElement.get_jQueryElement().height() + currentElement.outerHeight();
        }
        if (this._checkRTLWithScrollX()) {
            positionOnBorder = -currentElement.outerWidth();
        }
        if (this._checkRTLWithScrollY()) {
            positionOnBorder = -currentElement.outerHeight();
        }
        return positionOnBorder;
    },
    
    _checkRTLWithScrollX: function js_com_cs_v2_UI_Scroller_ItemScroller$_checkRTLWithScrollX() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v2.UI.Scroller.AnimDirection.rightToLeft && this._animationScrollX;
    },
    
    _checkLTRWithScrollX: function js_com_cs_v2_UI_Scroller_ItemScroller$_checkLTRWithScrollX() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v2.UI.Scroller.AnimDirection.leftToRight && this._animationScrollX;
    },
    
    _checkLTRWithScrollY: function js_com_cs_v2_UI_Scroller_ItemScroller$_checkLTRWithScrollY() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v2.UI.Scroller.AnimDirection.leftToRight && (!this._animationScrollX);
    },
    
    _adjustIncrementation: function js_com_cs_v2_UI_Scroller_ItemScroller$_adjustIncrementation(incrementation) {
        /// <param name="incrementation" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        if (this.get_animationDirection() === js.com.cs.v2.UI.Scroller.AnimDirection.rightToLeft) {
            incrementation = -incrementation;
        }
        return incrementation;
    },
    
    _getCombinedWidthOfChildElements: function js_com_cs_v2_UI_Scroller_ItemScroller$_getCombinedWidthOfChildElements() {
        /// <returns type="Number" integer="true"></returns>
        var currentWidth = 0;
        for (var count = 0; count < this._childElements.length; count++) {
            var childElem = this._childElements.eq(count);
            currentWidth += childElem.outerWidth(true);
            if (count === this._childElements.length - 1) {
                var margin = 0;
                if (this._animationScrollX) {
                    margin = Number.parse(childElem.css('marginRight'));
                }
                else {
                    margin = Number.parse(childElem.css('marginBottom'));
                }
                if (!isNullOrUndefined(margin)) {
                    currentWidth -= Number.parse(margin);
                }
            }
        }
        return currentWidth;
    },
    
    _getHeightOfParentElement: function js_com_cs_v2_UI_Scroller_ItemScroller$_getHeightOfParentElement() {
        /// <returns type="Number" integer="true"></returns>
        return this._parentContainerElement.get_jQueryElement().width();
    },
    
    _getCombinedHeightOfChildElements: function js_com_cs_v2_UI_Scroller_ItemScroller$_getCombinedHeightOfChildElements() {
        /// <returns type="Number" integer="true"></returns>
        var currentHeight = 0;
        for (var count = 0; count < this._childElements.length; count++) {
            currentHeight += this._childElements.eq(count).outerHeight(true);
        }
        return currentHeight;
    },
    
    _getWidthOfParentElement: function js_com_cs_v2_UI_Scroller_ItemScroller$_getWidthOfParentElement() {
        /// <returns type="Number" integer="true"></returns>
        return this._parentContainerElement.get_jQueryElement().width();
    }
}


Type.createNamespace('js.com.cs.v2.UI.SlideShow.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.SlideShow.v1.SlideDetails

js.com.cs.v2.UI.SlideShow.v1.SlideDetails = function js_com_cs_v2_UI_SlideShow_v1_SlideDetails() {
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v2.UI.SlideShow.v1.SlideDetails.prototype = {
    slideDuration: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.SlideShow.v1.SlideShow

js.com.cs.v2.UI.SlideShow.v1.SlideShow = function js_com_cs_v2_UI_SlideShow_v1_SlideShow(ulElement, details) {
    /// <param name="ulElement" type="jQuery">
    /// </param>
    /// <param name="details" type="js.com.cs.v2.UI.SlideShow.v1.SlideDetails">
    /// </param>
    /// <field name="_mainElement" type="jQuery">
    /// </field>
    /// <field name="_intID" type="Number" integer="true">
    /// </field>
    /// <field name="_slideDuration" type="Number" integer="true">
    /// </field>
    this._mainElement = ulElement;
    this._slideDuration = details.slideDuration;
    this._init();
}
js.com.cs.v2.UI.SlideShow.v1.SlideShow.prototype = {
    _mainElement: null,
    _intID: 0,
    _slideDuration: 0,
    
    _initUL: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_initUL() {
        this._mainElement.css('position', 'relative');
    },
    
    _init: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_init() {
        this._initUL();
        this._onlyShowFirst();
        this._initSlideShow();
    },
    
    _initSlideShow: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_initSlideShow() {
        this._intCallback();
    },
    
    _delay: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_delay() {
        this._intID = window.setTimeout(Delegate.create(this, this._intCallback), this._slideDuration);
    },
    
    _intCallback: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_intCallback() {
        this.moveNext(false);
    },
    
    _onlyShowFirst: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_onlyShowFirst() {
        var liElems = js.com.JQueryScriptSharp.jQueryUtil.select('li', this._mainElement);
        liElems.css('position', 'absolute');
        liElems.fadeOut(0);
    },
    
    moveNext: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$moveNext(byUser) {
        /// <param name="byUser" type="Boolean">
        /// </param>
        if (byUser) {
            window.clearInterval(this._intID);
            this._mNext();
        }
        else {
            this._mNext();
        }
    },
    
    _mNext: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$_mNext() {
        var liElemSelected = js.com.JQueryScriptSharp.jQueryUtil.select('li.selected', this._mainElement);
        liElemSelected.fadeOut(this._slideDuration);
        liElemSelected.removeClass('selected');
        var liNext = liElemSelected.next('li');
        if (liNext.length > 0) {
            liNext.addClass('selected').fadeIn(this._slideDuration, Delegate.create(this, this._delay));
        }
        else {
            var firstLI = js.com.JQueryScriptSharp.jQueryUtil.select('li', this._mainElement).eq(0).addClass('selected').fadeIn(this._slideDuration, Delegate.create(this, this._delay));
        }
    },
    
    movePrevious: function js_com_cs_v2_UI_SlideShow_v1_SlideShow$movePrevious() {
        window.clearInterval(this._intID);
        var liElemSelected = js.com.JQueryScriptSharp.jQueryUtil.select('li.selected', this._mainElement);
        liElemSelected.fadeOut(this._slideDuration);
        liElemSelected.removeClass('selected');
        if (liElemSelected.prev('li').length > 0) {
            liElemSelected.prev('li').addClass('selected').fadeIn(this._slideDuration);
        }
        else {
            var firstLI = js.com.JQueryScriptSharp.jQueryUtil.select('li:last', this._mainElement);
            firstLI.addClass('selected').fadeIn(this._slideDuration);
        }
    }
}


Type.createNamespace('js.com.cs.v2.UI.Text');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Text.TextFormater

js.com.cs.v2.UI.Text.TextFormater = function js_com_cs_v2_UI_Text_TextFormater() {
}
js.com.cs.v2.UI.Text.TextFormater.convertHTMLToNormalText = function js_com_cs_v2_UI_Text_TextFormater$convertHTMLToNormalText(htmlString) {
    /// <param name="htmlString" type="String">
    /// </param>
    /// <returns type="String"></returns>
    var regexPattern = new RegExp('<br.*?>', 'gm');
    var newString = htmlString.replace(regexPattern, '\r\n');
    return newString;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Text.TextOneLineWidthCalculator

js.com.cs.v2.UI.Text.TextOneLineWidthCalculator = function js_com_cs_v2_UI_Text_TextOneLineWidthCalculator(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <field name="_origWidthStyle" type="String">
    /// </field>
    /// <field name="_origHeightStyle" type="String">
    /// </field>
    /// <field name="_minHeight" type="Number" integer="true">
    /// </field>
    /// <field name="_itemContentWidth" type="Number" integer="true">
    /// </field>
    this._origWidthStyle = element.style.width;
    this._origHeightStyle = element.style.height;
    element.style.height = 'auto';
    this._itemContentWidth = js.com.cs.v2.Util.GeneralUtil.getOutherWidth(element);
    var currHeight = js.com.cs.v2.Util.GeneralUtil.getOuterHeight(element);
    element.style.width = '999999px';
    this._minHeight = js.com.cs.v2.Util.GeneralUtil.getOuterHeight(element);
    if (this._minHeight < currHeight) {
        this._calculateMinimumHeight();
    }
}
js.com.cs.v2.UI.Text.TextOneLineWidthCalculator.prototype = {
    _origWidthStyle: null,
    _origHeightStyle: null,
    _minHeight: 0,
    _itemContentWidth: 0,
    
    _calculateMinimumHeight: function js_com_cs_v2_UI_Text_TextOneLineWidthCalculator$_calculateMinimumHeight() {
        var incWidth = 5000;
    },
    
    _init: function js_com_cs_v2_UI_Text_TextOneLineWidthCalculator$_init() {
    }
}


Type.createNamespace('js.com.cs.v2.UI.Ticker');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION

js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION = function() { 
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION.prototype = {
    left: 0, 
    right: 1
}
js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION.createEnum('js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Ticker.FadingTicker

js.com.cs.v2.UI.Ticker.FadingTicker = function js_com_cs_v2_UI_Ticker_FadingTicker(divHolderID, htmlTexts, fadeDurationMs, delayMs, random) {
    /// <param name="divHolderID" type="String">
    /// </param>
    /// <param name="htmlTexts" type="Array" elementType="String">
    /// </param>
    /// <param name="fadeDurationMs" type="Number" integer="true">
    /// </param>
    /// <param name="delayMs" type="Number" integer="true">
    /// </param>
    /// <param name="random" type="Boolean">
    /// </param>
    /// <field name="_fadeDurationMs" type="Number" integer="true">
    /// </field>
    /// <field name="_delayMs" type="Number" integer="true">
    /// </field>
    /// <field name="_divHolder" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_htmlTexts" type="Array" elementType="String">
    /// </field>
    /// <field name="_index" type="Number" integer="true">
    /// </field>
    /// <field name="_random" type="Boolean">
    /// </field>
    /// <field name="_initial" type="Boolean">
    /// </field>
    /// <field name="_currTimeoutHandler" type="Number" integer="true">
    /// </field>
    this._divHolder = new js.com.cs.v2.Controls.Common.MyDivElement(divHolderID);
    this._delayMs = delayMs;
    this._fadeDurationMs = fadeDurationMs;
    this._htmlTexts = htmlTexts;
    this._random = random;
    this._index = -1;
    this._init();
}
js.com.cs.v2.UI.Ticker.FadingTicker.prototype = {
    _fadeDurationMs: 1000,
    
    get_fadeDurationMs: function js_com_cs_v2_UI_Ticker_FadingTicker$get_fadeDurationMs() {
        /// <value type="Number" integer="true"></value>
        return this._fadeDurationMs;
    },
    set_fadeDurationMs: function js_com_cs_v2_UI_Ticker_FadingTicker$set_fadeDurationMs(value) {
        /// <value type="Number" integer="true"></value>
        this._fadeDurationMs = value;
        return value;
    },
    
    _delayMs: 5000,
    
    get_delayMs: function js_com_cs_v2_UI_Ticker_FadingTicker$get_delayMs() {
        /// <value type="Number" integer="true"></value>
        return this._delayMs;
    },
    set_delayMs: function js_com_cs_v2_UI_Ticker_FadingTicker$set_delayMs(value) {
        /// <value type="Number" integer="true"></value>
        this._delayMs = value;
        return value;
    },
    
    _divHolder: null,
    _htmlTexts: null,
    _index: 0,
    _random: false,
    _initial: true,
    _currTimeoutHandler: 0,
    
    _reset: function js_com_cs_v2_UI_Ticker_FadingTicker$_reset() {
        if (this._random) {
            this._htmlTexts = js.com.cs.v2.Util.ArrayUtil.randomizeArray(this._htmlTexts);
        }
        this._index = -1;
    },
    
    _init: function js_com_cs_v2_UI_Ticker_FadingTicker$_init() {
        this._reset();
        this._next();
    },
    
    _showNextText: function js_com_cs_v2_UI_Ticker_FadingTicker$_showNextText() {
        if (this._index === this._htmlTexts.length - 1) {
            this._reset();
        }
        this._index++;
        var text = this._htmlTexts[this._index];
        this._divHolder.set_innerHTML(text);
        this._divHolder.get_jQueryElement().fadeIn(this.get_fadeDurationMs(), Delegate.create(this, this._onTextShown));
    },
    
    _next: function js_com_cs_v2_UI_Ticker_FadingTicker$_next() {
        if (this._initial) {
            this._onTextHidden();
            this._initial = false;
        }
        else {
            this._divHolder.get_jQueryElement().fadeOut(this.get_fadeDurationMs(), Delegate.create(this, this._onTextHidden));
        }
    },
    
    _onTextShown: function js_com_cs_v2_UI_Ticker_FadingTicker$_onTextShown() {
        this._currTimeoutHandler = window.setTimeout(Delegate.create(this, this._next), this.get_delayMs());
    },
    
    _onTextHidden: function js_com_cs_v2_UI_Ticker_FadingTicker$_onTextHidden() {
        this._showNextText();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Ticker.RotatingTicker

js.com.cs.v2.UI.Ticker.RotatingTicker = function js_com_cs_v2_UI_Ticker_RotatingTicker(divHolderID, htmlText, stopOnMouseOver, speedPx, updateDelayMs, splitDistancePx, initialOffset, rotateDirection) {
    /// <param name="divHolderID" type="String">
    /// Holder where text will rotate
    /// </param>
    /// <param name="htmlText" type="String">
    /// Textual content rotating
    /// </param>
    /// <param name="stopOnMouseOver" type="Boolean">
    /// </param>
    /// <param name="speedPx" type="Number" integer="true">
    /// The amount of pixels to move with each increment
    /// </param>
    /// <param name="updateDelayMs" type="Number" integer="true">
    /// The amount of ms to update delay
    /// </param>
    /// <param name="splitDistancePx" type="Number" integer="true">
    /// The distance to add between the texts when it is moved entirely
    /// </param>
    /// <param name="initialOffset" type="Number" integer="true">
    /// The initial offset (px) from the 0 coordinate
    /// </param>
    /// <param name="rotateDirection" type="js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION">
    /// Move left / right
    /// </param>
    /// <field name="_rotateDirection" type="js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION">
    /// </field>
    /// <field name="_htmlText" type="String">
    /// </field>
    /// <field name="_divHolder" type="js.com.cs.v2.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_stopOnMouseOver" type="Boolean">
    /// </field>
    /// <field name="_content1" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_content2" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_contentWidth" type="Number" integer="true">
    /// </field>
    /// <field name="_containerWidth" type="Number" integer="true">
    /// </field>
    /// <field name="_speedPx" type="Number" integer="true">
    /// </field>
    /// <field name="_updateDelayMS" type="Number" integer="true">
    /// </field>
    /// <field name="_splitDistancePx" type="Number" integer="true">
    /// </field>
    /// <field name="_initialOffset" type="Number" integer="true">
    /// </field>
    /// <field name="_updateHandler" type="Number" integer="true">
    /// </field>
    /// <field name="_content1Pos" type="Number" integer="true">
    /// </field>
    /// <field name="_content2Pos" type="Number" integer="true">
    /// </field>
    this._divHolder = new js.com.cs.v2.Controls.Common.MyDivElement(divHolderID);
    this._htmlText = htmlText;
    this._rotateDirection = rotateDirection;
    this._stopOnMouseOver = stopOnMouseOver;
    this._initialOffset = initialOffset;
    this._content1 = new js.com.cs.v2.Controls.Common.MyDOMElement(document.createElement('nobr'));
    this._content2 = new js.com.cs.v2.Controls.Common.MyDOMElement(document.createElement('nobr'));
    this._content1.get_style().position = this._content2.get_style().position = 'absolute';
    this._divHolder.get_style().position = 'relative';
    this._content1.set_innerHTML(this._content2.set_innerHTML(htmlText));
    this._divHolder.appendChild(this._content1);
    this._splitDistancePx = splitDistancePx;
    this._speedPx = speedPx;
    this._updateDelayMS = updateDelayMs;
    this._contentWidth = this._content1.get_jQueryElement().outerWidth();
    this._containerWidth = this._divHolder.get_jQueryElement().outerWidth();
    if (this._containerWidth < this._contentWidth) {
        this._initTicker();
    }
    this._divHolder.add_onMouseOver(Delegate.create(this, this._divHolder_onMouseOver));
    this._divHolder.add_onMouseOut(Delegate.create(this, this._divHolder_onMouseOut));
}
js.com.cs.v2.UI.Ticker.RotatingTicker.prototype = {
    _rotateDirection: 0,
    _htmlText: null,
    _divHolder: null,
    _stopOnMouseOver: false,
    _content1: null,
    _content2: null,
    _contentWidth: 0,
    _containerWidth: 0,
    _speedPx: 0,
    _updateDelayMS: 0,
    _splitDistancePx: 0,
    _initialOffset: 0,
    _updateHandler: 0,
    _content1Pos: 0,
    _content2Pos: 0,
    
    _divHolder_onMouseOut: function js_com_cs_v2_UI_Ticker_RotatingTicker$_divHolder_onMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._stopOnMouseOver) {
            this.start();
        }
    },
    
    _divHolder_onMouseOver: function js_com_cs_v2_UI_Ticker_RotatingTicker$_divHolder_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
        /// </param>
        if (this._stopOnMouseOver) {
            this.stop();
        }
    },
    
    _resetPositions: function js_com_cs_v2_UI_Ticker_RotatingTicker$_resetPositions() {
        this._content1.get_style().left = '0px';
        this._content1Pos = 0;
        if (this._rotateDirection === js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION.left) {
            this._content2Pos = this._contentWidth + this._splitDistancePx;
        }
        else {
            this._content2Pos = this._contentWidth + this._splitDistancePx;
        }
        this._updateTextPositions();
    },
    
    _updateTextPositions: function js_com_cs_v2_UI_Ticker_RotatingTicker$_updateTextPositions() {
        this._content2.get_style().left = this._content2Pos + 'px';
        this._content1.get_style().left = this._content1Pos + 'px';
    },
    
    _setInitialOffset: function js_com_cs_v2_UI_Ticker_RotatingTicker$_setInitialOffset() {
        this._content1Pos += this._initialOffset;
        this._content2Pos += this._initialOffset;
        this._updateTextPositions();
    },
    
    _initTicker: function js_com_cs_v2_UI_Ticker_RotatingTicker$_initTicker() {
        this._divHolder.appendChild(this._content2);
        this._resetPositions();
        this._setInitialOffset();
        this.start();
    },
    
    stop: function js_com_cs_v2_UI_Ticker_RotatingTicker$stop() {
        window.clearInterval(this._updateHandler);
    },
    
    start: function js_com_cs_v2_UI_Ticker_RotatingTicker$start() {
        window.clearInterval(this._updateHandler);
        this._updateHandler = window.setInterval(Delegate.create(this, this._tick), this._updateDelayMS);
    },
    
    _tick: function js_com_cs_v2_UI_Ticker_RotatingTicker$_tick() {
        if (this._rotateDirection === js.com.cs.v2.UI.Ticker.ROTATE_DIRECTION.left) {
            this._content1Pos -= this._speedPx;
            this._content2Pos -= this._speedPx;
            if (this._content2Pos <= 0) {
                this._resetPositions();
                return;
            }
        }
        else {
            this._content1Pos += this._speedPx;
            this._content2Pos += this._speedPx;
            if (this._content2Pos >= 0) {
                this._resetPositions();
                return;
            }
        }
        this._updateTextPositions();
    },
    
    _init: function js_com_cs_v2_UI_Ticker_RotatingTicker$_init() {
    }
}


Type.createNamespace('js.com.cs.v2.UI.Uploadify.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.UI.Uploadify.v1._uploadify

js.com.cs.v2.UI.Uploadify.v1._uploadify = function js_com_cs_v2_UI_Uploadify_v1__uploadify() {
}


Type.createNamespace('js.com.cs.v2.Util');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION

js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION = function() { 
    /// <field name="center" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="random" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="none" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION.prototype = {
    center: 10, 
    random: 20, 
    none: 0
}
js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION.createEnum('js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.ArrayUtil

js.com.cs.v2.Util.ArrayUtil = function js_com_cs_v2_Util_ArrayUtil() {
}
js.com.cs.v2.Util.ArrayUtil._randomCompareCallback = function js_com_cs_v2_Util_ArrayUtil$_randomCompareCallback(x, y) {
    /// <param name="x" type="Object">
    /// </param>
    /// <param name="y" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var r = Math.random();
    return (r < 0.5) ? -1 : 1;
}
js.com.cs.v2.Util.ArrayUtil.clone = function js_com_cs_v2_Util_ArrayUtil$clone(a) {
    /// <param name="a" type="Array">
    /// </param>
    /// <returns type="Array"></returns>
    var b = [];
    for (var i = 0; i < a.length; i++) {
        b.push(a[i]);
    }
    return b;
}
js.com.cs.v2.Util.ArrayUtil.randomizeArray = function js_com_cs_v2_Util_ArrayUtil$randomizeArray(a) {
    /// <param name="a" type="Array">
    /// </param>
    /// <returns type="Array"></returns>
    if (a.length <= 1) {
        return a;
    }
    var lastElement = a[a.length - 1];
    var b = js.com.cs.v2.Util.ArrayUtil.clone(a);
    b.sort(Delegate.create(null, js.com.cs.v2.Util.ArrayUtil._randomCompareCallback));
    if (b[0] === lastElement) {
        return js.com.cs.v2.Util.ArrayUtil.randomizeArray(b);
    }
    else {
        return b;
    }
}
js.com.cs.v2.Util.ArrayUtil.addItemInArray = function js_com_cs_v2_Util_ArrayUtil$addItemInArray(oArray, item, index) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="item" type="Object">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    if (index == null) {
        index = -1;
    }
    var array = oArray;
    if (index === -1) {
        index = array.length;
    }
    array.splice(index, 0, item);
}
js.com.cs.v2.Util.ArrayUtil.removeObjectFromArray = function js_com_cs_v2_Util_ArrayUtil$removeObjectFromArray(oArray, item) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="item" type="Object">
    /// </param>
    var a = oArray;
    for (var i = 0; i < a.length; i++) {
        if (a[i] === item) {
            js.com.cs.v2.Util.ArrayUtil.removeItemFromArray(a, i);
            break;
        }
    }
}
js.com.cs.v2.Util.ArrayUtil.removeItemFromArray = function js_com_cs_v2_Util_ArrayUtil$removeItemFromArray(oArray, index) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    oArray.splice(index, 1);
}
js.com.cs.v2.Util.ArrayUtil.removeItemsFromArray = function js_com_cs_v2_Util_ArrayUtil$removeItemsFromArray(oArray, from, to) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="from" type="Number" integer="true">
    /// </param>
    /// <param name="to" type="Number" integer="true">
    /// </param>
    for (var i = from; i <= to; i++) {
        js.com.cs.v2.Util.ArrayUtil.removeItemFromArray(oArray, from);
    }
}
js.com.cs.v2.Util.ArrayUtil.removeObjectsFromArray = function js_com_cs_v2_Util_ArrayUtil$removeObjectsFromArray(oArray, itemToRemove) {
    /// <summary>
    /// Remove all instances of an object from an array
    /// </summary>
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="itemToRemove" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var amtRemoved = 0;
    var a = oArray;
    for (var i = 0; i < a.length; i++) {
        if (a[i] === itemToRemove) {
            js.com.cs.v2.Util.ArrayUtil.removeItemFromArray(a, i);
            amtRemoved++;
            i--;
        }
    }
    return amtRemoved;
}
js.com.cs.v2.Util.ArrayUtil.pop = function js_com_cs_v2_Util_ArrayUtil$pop(arr) {
    /// <param name="arr" type="Object">
    /// </param>
    /// <returns type="Object"></returns>
    var item = arr.pop();
    return item;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.Console

js.com.cs.v2.Util.Console = function js_com_cs_v2_Util_Console() {
}
js.com.cs.v2.Util.Console.log = function js_com_cs_v2_Util_Console$log(msg) {
    /// <param name="msg" type="Object">
    /// </param>
    try {
        var t = console;
        t.log(msg);
    }
    catch (ex) {
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util._CookieOptions

js.com.cs.v2.Util._CookieOptions = function js_com_cs_v2_Util__CookieOptions() {
    /// <field name="expires" type="Object">
    /// </field>
    /// <field name="path" type="String">
    /// </field>
    /// <field name="domain" type="String">
    /// </field>
    /// <field name="secure" type="Boolean">
    /// </field>
}
js.com.cs.v2.Util._CookieOptions.prototype = {
    expires: null,
    path: null,
    domain: null,
    secure: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.CookieUtil

js.com.cs.v2.Util.CookieUtil = function js_com_cs_v2_Util_CookieUtil() {
}
js.com.cs.v2.Util.CookieUtil.getCookie = function js_com_cs_v2_Util_CookieUtil$getCookie(name) {
    /// <param name="name" type="String">
    /// </param>
    /// <returns type="String"></returns>
    var cookieValue = null;
    if (!String.isNullOrEmpty(document.cookie)) {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = js.com.cs.v2.Util.StringUtil.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = js.com.cs.v2.Util.GeneralUtil.decodeURIComponent(cookie.substr(name.length + 1, name.length));
                break;
            }
        }
    }
    return cookieValue;
}
js.com.cs.v2.Util.CookieUtil.setCookie = function js_com_cs_v2_Util_CookieUtil$setCookie(name, value, options) {
    /// <param name="name" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <param name="options" type="js.com.cs.v2.Util._CookieOptions">
    /// </param>
    options = (options != null) ? options : {};
    if (value == null) {
        value = '';
        options.expires = -1;
    }
    var expires = '';
    if (options.expires != null && (Number.parse(options.expires.toString()) != null || options.expires.toString() != null)) {
        var date;
        if (Number.parse(options.expires.toString()) != null) {
            date = new Date();
            var intExpires = Number.parse(options.expires.toString());
            date.setTime(date.getTime() + (intExpires * 24 * 60 * 60 * 1000));
        }
        else {
            date = options.expires;
        }
        expires = '; expires=' + date.toUTCString();
    }
    var path = (!String.isNullOrEmpty(options.path)) ? '; path=' + options.path : '';
    var domain = (!String.isNullOrEmpty(options.domain)) ? '; domain=' + options.domain : '';
    var secure = (options.secure) ? '; secure' : '';
    var arr = [];
    (arr).add(name);
    (arr).add('=');
    (arr).add(js.com.cs.v2.Util.GeneralUtil.encodeURIComponent(value));
    (arr).add(expires);
    (arr).add(path);
    (arr).add(domain);
    (arr).add(secure);
    document.cookie = arr.join('');
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.AjaxUtil

js.com.cs.v2.Util.AjaxUtil = function js_com_cs_v2_Util_AjaxUtil() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util._jQueryUploadifyInitParams

js.com.cs.v2.Util._jQueryUploadifyInitParams = function js_com_cs_v2_Util__jQueryUploadifyInitParams() {
    /// <field name="settings" type="js.com.JQueryScriptSharp._UploadifySettings">
    /// </field>
    /// <field name="fileUpload" type="js.com.cs.v2.Controls.Form.MyFileUpload">
    /// </field>
}
js.com.cs.v2.Util._jQueryUploadifyInitParams.prototype = {
    settings: null,
    fileUpload: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.jQueryUploadifyUtil

js.com.cs.v2.Util.jQueryUploadifyUtil = function js_com_cs_v2_Util_jQueryUploadifyUtil() {
    /// <field name="_iniT_PARAMS" type="Array" elementType="_jQueryUploadifyInitParams" static="true">
    /// </field>
}
js.com.cs.v2.Util.jQueryUploadifyUtil._initUploadify = function js_com_cs_v2_Util_jQueryUploadifyUtil$_initUploadify(settings, fileUploadID) {
    /// <param name="settings" type="js.com.JQueryScriptSharp._UploadifySettings">
    /// </param>
    /// <param name="fileUploadID" type="String">
    /// </param>
    if (isNullOrUndefined(settings.cancelImg)) {
        settings.cancelImg = js.com.JQueryScriptSharp._UploadifySettings.defaulT_CANCEL_IMAGE;
    }
    var upload = js.com.JQueryScriptSharp.jQueryUtil.selectById(fileUploadID);
    if (upload.length === 0) {
        alert('File upload with ID \'' + fileUploadID + '\' not in DOM');
    }
    else {
        upload.uploadify(settings);
    }
}
js.com.cs.v2.Util.jQueryUploadifyUtil.initUploadify = function js_com_cs_v2_Util_jQueryUploadifyUtil$initUploadify(settings, fileUploadID) {
    /// <param name="settings" type="js.com.JQueryScriptSharp._UploadifySettings">
    /// </param>
    /// <param name="fileUploadID" type="String">
    /// </param>
    var ok = true;
    if (ok) {
        js.com.cs.v2.Util.jQueryUploadifyUtil._initUploadify(settings, fileUploadID);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.ResizeUtil

js.com.cs.v2.Util.ResizeUtil = function js_com_cs_v2_Util_ResizeUtil() {
}
js.com.cs.v2.Util.ResizeUtil.fitInBox = function js_com_cs_v2_Util_ResizeUtil$fitInBox(elem, width, height) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// </param>
    var origWidth = elem.get_jQueryElement().width();
    var origHeight = elem.get_jQueryElement().height();
    var ratio = origWidth / origHeight;
    if (elem.get_jQueryElement().width() > width) {
        elem.get_jQueryElement().width(width);
        elem.get_jQueryElement().height(Math.truncate((width / ratio)));
    }
    if (elem.get_jQueryElement().height() > height) {
        elem.get_jQueryElement().height(height);
        elem.get_jQueryElement().width((height * ratio));
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.jQueryShadowBoxUtil

js.com.cs.v2.Util.jQueryShadowBoxUtil = function js_com_cs_v2_Util_jQueryShadowBoxUtil() {
    /// <field name="___onOpen" type="js.com.JQueryScriptSharp._ShadowBoxElementStoppableHandler" static="true">
    /// </field>
    /// <field name="___onClose" type="js.com.JQueryScriptSharp._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="___onFinish" type="js.com.JQueryScriptSharp._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="___onChange" type="js.com.JQueryScriptSharp._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="_onOpenFinishHandlerToCall" type="js.com.JQueryScriptSharp._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="_HANDLERS_INIT" type="Boolean" static="true">
    /// </field>
    /// <field name="_SHADOWBOX_INIT" type="Boolean" static="true">
    /// </field>
    /// <field name="_OPEN_LINK_COUNT" type="Number" integer="true" static="true">
    /// </field>
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onOpen = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add__onOpen(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen = Delegate.combine(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onOpen = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove__onOpen(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen = Delegate.remove(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onClose = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add__onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose = Delegate.combine(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onClose = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove__onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose = Delegate.remove(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onFinish = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add__onFinish(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish = Delegate.combine(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onFinish = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove__onFinish(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish = Delegate.remove(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onChange = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add__onChange(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange = Delegate.combine(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onChange = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove__onChange(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange = Delegate.remove(js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange, value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add_onOpen = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add_onOpen(value) {
    /// <summary>
    /// A hook function that will be fired when Shadowbox opens. The single argument of this function will be the current gallery element. Returning boolean false from this callback will prevent Shadowbox from opening.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onOpen(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove_onOpen = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove_onOpen(value) {
    /// <summary>
    /// A hook function that will be fired when Shadowbox opens. The single argument of this function will be the current gallery element. Returning boolean false from this callback will prevent Shadowbox from opening.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onOpen(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add_onFinish = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add_onFinish(value) {
    /// <summary>
    /// A hook function that will fire when Shadowbox finishes loading the current gallery piece (after all animations are complete). The single argument of this function will be the current gallery element.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onFinish(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove_onFinish = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove_onFinish(value) {
    /// <summary>
    /// A hook function that will fire when Shadowbox finishes loading the current gallery piece (after all animations are complete). The single argument of this function will be the current gallery element.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onFinish(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add_onClose = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add_onClose(value) {
    /// <summary>
    /// A hook function that will be fired when Shadowbox closes. The single argument of this function will be the gallery element that was last displayed.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onClose(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove_onClose = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove_onClose(value) {
    /// <summary>
    /// A hook function that will be fired when Shadowbox closes. The single argument of this function will be the gallery element that was last displayed.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onClose(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.add_onChange = function js_com_cs_v2_Util_jQueryShadowBoxUtil$add_onChange(value) {
    /// <summary>
    /// A hook function that will be fired when Shadowbox changes from one gallery element to another. The single argument of this function will be the gallery element that is about to be displayed.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.add__onChange(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.remove_onChange = function js_com_cs_v2_Util_jQueryShadowBoxUtil$remove_onChange(value) {
    /// <summary>
    /// A hook function that will be fired when Shadowbox changes from one gallery element to another. The single argument of this function will be the gallery element that is about to be displayed.
    /// </summary>
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v2.Util.jQueryShadowBoxUtil.remove__onChange(value);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._onClose = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_onClose(options) {
    /// <param name="options" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
    /// </param>
    if (js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose != null) {
        js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose.invoke(options);
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpen = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_onOpen(options) {
    /// <param name="options" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen != null) {
        return js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen.invoke(options);
    }
    return true;
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._onChange = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_onChange(options) {
    /// <param name="options" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
    /// </param>
    if (js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange != null) {
        js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange.invoke(options);
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._onFinish = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_onFinish(options) {
    /// <param name="options" type="js.com.JQueryScriptSharp._ShadowBoxObjectParams">
    /// </param>
    if (js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall != null) {
        js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall.invoke(options);
    }
    if (js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish != null) {
        js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish.invoke(options);
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_initHandlers() {
    if (!js.com.cs.v2.Util.jQueryShadowBoxUtil._HANDLERS_INIT) {
        Shadowbox.options.onOpen = Delegate.create(null, js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpen);
        Shadowbox.options.onFinish = Delegate.create(null, js.com.cs.v2.Util.jQueryShadowBoxUtil._onFinish);
        Shadowbox.options.onClose = Delegate.create(null, js.com.cs.v2.Util.jQueryShadowBoxUtil._onClose);
        Shadowbox.options.onOpen = Delegate.create(null, js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpen);
        js.com.cs.v2.Util.jQueryShadowBoxUtil._HANDLERS_INIT = true;
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.getRelTagContent = function js_com_cs_v2_Util_jQueryShadowBoxUtil$getRelTagContent(gallery, width, height) {
    /// <param name="gallery" type="String">
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    var s = 'shadowbox';
    if (!String.isNullOrEmpty(gallery)) {
        s += '[' + gallery + ']';
    }
    if (!isNullOrUndefined(width)) {
        s += ';width=' + width;
    }
    if (!isNullOrUndefined(height)) {
        s += ';height=' + height;
    }
    return s;
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.updateRelTag = function js_com_cs_v2_Util_jQueryShadowBoxUtil$updateRelTag(elem, title, gallery, width, height) {
    /// <param name="elem" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="gallery" type="String">
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// </param>
    elem.setAttribute('rel', js.com.cs.v2.Util.jQueryShadowBoxUtil.getRelTagContent(gallery, width, height));
    if (!String.isNullOrEmpty(title)) {
        elem.title = title;
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.openLink = function js_com_cs_v2_Util_jQueryShadowBoxUtil$openLink(content, title, gallery, player, width, height, OnOpenFinishCallback) {
    /// <param name="content" type="Object">
    /// String / DOMElement
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="gallery" type="String">
    /// </param>
    /// <param name="player" type="String">
    /// </param>
    /// <param name="width" type="Number">
    /// </param>
    /// <param name="height" type="Number">
    /// </param>
    /// <param name="OnOpenFinishCallback" type="js.com.JQueryScriptSharp._ShadowBoxElementHandler">
    /// </param>
    js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
    var elem = null;
    var divElemContainer = null;
    if (Type.canCast(content, js.com.cs.v2.Controls.Common.MyDOMElement)) {
        elem = (content);
    }
    else if (Type.canCast(content, String)) {
        elem = null;
    }
    else if (Type.canCast(content, jQuery)) {
        var jQueryContent = content;
        if (jQueryContent.length > 0) {
            elem = new js.com.cs.v2.Controls.Common.MyDOMElement((content).get(0));
        }
    }
    else if (Type.canCast(content, Object)) {
        elem = new js.com.cs.v2.Controls.Common.MyDOMElement(content);
    }
    if (elem != null) {
        var id = 'shadowbox-inline-content-' + js.com.cs.v2.Util.jQueryShadowBoxUtil._OPEN_LINK_COUNT;
        if (elem.get_parent() == null) {
            divElemContainer = new js.com.cs.v2.Controls.Common.MyDivElement();
            divElemContainer.set_id(id);
            divElemContainer.appendChild(elem);
            document.body.appendChild(divElemContainer.get_domElement());
        }
        else if (String.isNullOrEmpty(elem.get_id())) {
            elem.set_id(id);
        }
        else {
            id = elem.get_id();
        }
        content = '#' + id;
    }
    var p = {};
    p.title = title;
    p.gallery = gallery;
    p.width = width;
    p.height = height;
    p.content = content;
    if (!String.isNullOrEmpty(player)) {
        p.player = player;
    }
    else {
        var contentStr = content;
        if (contentStr.indexOf('<') !== -1 && contentStr.indexOf('>') !== -1) {
            p.player = 'html';
        }
        else if (contentStr.indexOf('#') === 0) {
            p.player = 'inline';
        }
        else {
            p.player = Shadowbox.getPlayer(content);
        }
    }
    js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall = null;
    if (!isNullOrUndefined(OnOpenFinishCallback)) {
        js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall = OnOpenFinishCallback;
    }
    Shadowbox.open(p);
    if (divElemContainer != null) {
        divElemContainer.get_parent().removeChild(divElemContainer);
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._jQueryShadowBoxUtil_OnFinish = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_jQueryShadowBoxUtil_OnFinish(elemOptions) {
    /// <param name="elemOptions" type="js.com.JQueryScriptSharp._ShadowBoxOptions">
    /// </param>
    alert('FINISH');
}
js.com.cs.v2.Util.jQueryShadowBoxUtil._jQueryShadowBoxUtil_OnChange = function js_com_cs_v2_Util_jQueryShadowBoxUtil$_jQueryShadowBoxUtil_OnChange(elemOptions) {
    /// <param name="elemOptions" type="js.com.JQueryScriptSharp._ShadowBoxOptions">
    /// </param>
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.initShadowBox = function js_com_cs_v2_Util_jQueryShadowBoxUtil$initShadowBox(options, callback) {
    /// <param name="options" type="js.com.JQueryScriptSharp._ShadowBoxOptions">
    /// </param>
    /// <param name="callback" type="DOMEventHandler">
    /// </param>
    if (!js.com.cs.v2.Util.jQueryShadowBoxUtil._SHADOWBOX_INIT) {
        js.com.cs.v2.Util.jQueryShadowBoxUtil._SHADOWBOX_INIT = true;
        js.com.cs.v2.Util.jQueryShadowBoxUtil._initHandlers();
        Shadowbox.init(options, callback);
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.get_shadowBoxPlayerElement = function js_com_cs_v2_Util_jQueryShadowBoxUtil$get_shadowBoxPlayerElement() {
    /// <summary>
    /// The element in the middle
    /// </summary>
    /// <value type="js.com.cs.v2.Controls.Common.MyDivElement"></value>
    var elem = js.com.JQueryScriptSharp.jQueryUtil.selectById('sb-player');
    if (elem.length > 0) {
        return new js.com.cs.v2.Controls.Common.MyDivElement(elem);
    }
    else {
        return null;
    }
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.showShadowBoxLoading = function js_com_cs_v2_Util_jQueryShadowBoxUtil$showShadowBoxLoading(text, durationMS) {
    /// <param name="text" type="String">
    /// </param>
    /// <param name="durationMS" type="Number" integer="true">
    /// </param>
    var jqueryLoading = js.com.JQueryScriptSharp.jQueryUtil.select('#sb-loading');
    var jqueryLoadingText = js.com.JQueryScriptSharp.jQueryUtil.select('#sb-loading-inner span');
    jqueryLoadingText.text(text);
    jqueryLoading.fadeIn(durationMS);
}
js.com.cs.v2.Util.jQueryShadowBoxUtil.hideShadowBoxLoading = function js_com_cs_v2_Util_jQueryShadowBoxUtil$hideShadowBoxLoading(durationMS) {
    /// <param name="durationMS" type="Number" integer="true">
    /// </param>
    var jqueryLoading = js.com.JQueryScriptSharp.jQueryUtil.select('#sb-loading');
    jqueryLoading.fadeOut(durationMS);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.DateUtil

js.com.cs.v2.Util.DateUtil = function js_com_cs_v2_Util_DateUtil() {
    /// <field name="montH_NAMES" type="Array" elementType="String" static="true">
    /// </field>
    /// <field name="daY_NAMES" type="Array" elementType="String" static="true">
    /// </field>
}
js.com.cs.v2.Util.DateUtil._initMonthsDays = function js_com_cs_v2_Util_DateUtil$_initMonthsDays() {
    if (js.com.cs.v2.Util.DateUtil.montH_NAMES == null) {
        js.com.cs.v2.Util.DateUtil.montH_NAMES = [];
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'January';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'February';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'March';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'April';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'May';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'June';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'July';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'August';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'September';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'October';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'November';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'December';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Jan';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Feb';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Mar';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Apr';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'May';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Jul';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Aug';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Sep';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Oct';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Nov';
        js.com.cs.v2.Util.DateUtil.montH_NAMES[js.com.cs.v2.Util.DateUtil.montH_NAMES.length] = 'Dec';
    }
    if (js.com.cs.v2.Util.DateUtil.daY_NAMES == null) {
        js.com.cs.v2.Util.DateUtil.daY_NAMES = [];
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Sunday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Monday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Tuesday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Wednesday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Thursday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Friday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Saturday';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Sun';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Mon';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Tue';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Wed';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Thu';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Fri';
        js.com.cs.v2.Util.DateUtil.daY_NAMES[js.com.cs.v2.Util.DateUtil.daY_NAMES.length] = 'Sat';
    }
}
js.com.cs.v2.Util.DateUtil.LZ = function js_com_cs_v2_Util_DateUtil$LZ(x) {
    /// <param name="x" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    return (((x < 0 || x > 9) ? '' : '0') + x);
}
js.com.cs.v2.Util.DateUtil._isDate = function js_com_cs_v2_Util_DateUtil$_isDate(val, format) {
    /// <param name="val" type="String">
    /// </param>
    /// <param name="format" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var date = js.com.cs.v2.Util.DateUtil._getDateFromFormat(val, format);
    if (date === 0) {
        return false;
    }
    return true;
}
js.com.cs.v2.Util.DateUtil._compareDates = function js_com_cs_v2_Util_DateUtil$_compareDates(date1, dateformat1, date2, dateformat2) {
    /// <param name="date1" type="String">
    /// </param>
    /// <param name="dateformat1" type="String">
    /// </param>
    /// <param name="date2" type="String">
    /// </param>
    /// <param name="dateformat2" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var d1 = js.com.cs.v2.Util.DateUtil._getDateFromFormat(date1, dateformat1);
    var d2 = js.com.cs.v2.Util.DateUtil._getDateFromFormat(date2, dateformat2);
    if (d1 === 0 || d2 === 0) {
        return -1;
    }
    else if (d1 > d2) {
        return 1;
    }
    return 0;
}
js.com.cs.v2.Util.DateUtil._formatDate = function js_com_cs_v2_Util_DateUtil$_formatDate(date, format) {
    /// <param name="date" type="Date">
    /// </param>
    /// <param name="format" type="String">
    /// </param>
    /// <returns type="String"></returns>
    js.com.cs.v2.Util.DateUtil._initMonthsDays();
    format = format + '';
    var result = '';
    var i_format = 0;
    var c = ' ';
    var token = '';
    var y = date.getFullYear().toString() + '';
    var M = date.getMonth() + 1;
    var d = date.getDate();
    var E = date.getDay();
    var H = date.getHours();
    var m = date.getMinutes();
    var s = date.getSeconds();
    var yyyy, yy, MMM, MM, dd, hh, h, mm, ss, ampm, HH, KK, K, kk, k;
    var value = {};
    if (y.toString().length < 4) {
        y = '' + (Number.parse(y) - 0 + 1900).toString();
    }
    value['y'] = '' + y;
    value['yyyy'] = y;
    value['yy'] = y.substring(2, 4);
    value['M'] = M;
    value['MM'] = js.com.cs.v2.Util.DateUtil.LZ(M);
    value['MMM'] = js.com.cs.v2.Util.DateUtil.montH_NAMES[M - 1];
    value['NNN'] = js.com.cs.v2.Util.DateUtil.montH_NAMES[M + 11];
    value['d'] = d;
    value['dd'] = js.com.cs.v2.Util.DateUtil.LZ(d);
    value['E'] = js.com.cs.v2.Util.DateUtil.daY_NAMES[E + 7];
    value['EE'] = js.com.cs.v2.Util.DateUtil.daY_NAMES[E];
    value['H'] = H;
    value['HH'] = js.com.cs.v2.Util.DateUtil.LZ(H);
    if (H === 0) {
        value['h'] = 12;
    }
    else if (H > 12) {
        value['h'] = H - 12;
    }
    else {
        value['h'] = H;
    }
    value['hh'] = js.com.cs.v2.Util.DateUtil.LZ(value['h']);
    if (H > 11) {
        value['K'] = H - 12;
    }
    else {
        value['K'] = H;
    }
    value['k'] = H + 1;
    value['KK'] = js.com.cs.v2.Util.DateUtil.LZ(value['K']);
    value['kk'] = js.com.cs.v2.Util.DateUtil.LZ(value['k']);
    if (H > 11) {
        value['a'] = 'PM';
    }
    else {
        value['a'] = 'AM';
    }
    value['m'] = m;
    value['mm'] = js.com.cs.v2.Util.DateUtil.LZ(m);
    value['s'] = s;
    value['ss'] = js.com.cs.v2.Util.DateUtil.LZ(s);
    while (i_format < format.length) {
        c = format.charAt(i_format);
        token = '';
        while ((format.charAt(i_format) === c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
        }
        if (value[token] != null) {
            result = result + value[token];
        }
        else {
            result = result + token;
        }
    }
    return result;
}
js.com.cs.v2.Util.DateUtil._isInteger = function js_com_cs_v2_Util_DateUtil$_isInteger(val) {
    /// <param name="val" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var digits = '1234567890';
    for (var i = 0; i < val.length; i++) {
        if (digits.indexOf(val.charAt(i)) === -1) {
            return false;
        }
    }
    return true;
}
js.com.cs.v2.Util.DateUtil._getInt = function js_com_cs_v2_Util_DateUtil$_getInt(str, i, minlength, maxlength) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="i" type="Number" integer="true">
    /// </param>
    /// <param name="minlength" type="Number" integer="true">
    /// </param>
    /// <param name="maxlength" type="Number" integer="true">
    /// </param>
    /// <returns type="Number"></returns>
    for (var x = maxlength; x >= minlength; x--) {
        var token = str.substring(i, i + x);
        if (token.length < minlength) {
            return null;
        }
        var n = null;
        n = Number.parse(token);
        if (n != null) {
            return n;
        }
    }
    return null;
}
js.com.cs.v2.Util.DateUtil._getDateFromFormat = function js_com_cs_v2_Util_DateUtil$_getDateFromFormat(val, format) {
    /// <param name="val" type="String">
    /// </param>
    /// <param name="format" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    val = val.replace(new RegExp('(^|\\D)0*', 'g'), '$1');
    js.com.cs.v2.Util.DateUtil._initMonthsDays();
    val = val + '';
    format = format + '';
    var i_val = 0;
    var i_format = 0;
    var c = ' ';
    var token = '';
    var token2 = '';
    var x = 0;
    var y = 0;
    var now = new Date();
    var year = 0;
    var month = 1;
    var date = 1;
    var hh = 0;
    var mm = 0;
    var ss = 0;
    var ampm = '';
    while (i_format < format.length) {
        c = format.charAt(i_format);
        token = '';
        while ((format.charAt(i_format) === c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
        }
        if (token === 'yyyy' || token === 'yy' || token === 'y') {
            if (token === 'yyyy') {
                x = 1;
                y = 4;
            }
            if (token === 'yy') {
                x = 1;
                y = 2;
            }
            if (token === 'y') {
                x = 1;
                y = 4;
            }
            year = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, x, y);
            if (year == null) {
                return 0;
            }
            i_val += year.toString().length;
            if (year.toString().length === 2) {
                if (year > 70) {
                    year = 1900 + (year - 0);
                }
                else {
                    year = 2000 + (year - 0);
                }
            }
        }
        else if (token === 'MMM' || token === 'NNN') {
            month = 0;
            for (var i = 0; i < js.com.cs.v2.Util.DateUtil.montH_NAMES.length; i++) {
                var month_name = js.com.cs.v2.Util.DateUtil.montH_NAMES[i];
                if (val.substring(i_val, i_val + month_name.length).toLowerCase() === month_name.toLowerCase()) {
                    if (token === 'MMM' || (token === 'NNN' && i > 11)) {
                        month = i + 1;
                        if (month > 12) {
                            month -= 12;
                        }
                        i_val += month_name.length;
                        break;
                    }
                }
            }
            if ((month < 1) || (month > 12)) {
                return 0;
            }
        }
        else if (token === 'EE' || token === 'E') {
            for (var i = 0; i < js.com.cs.v2.Util.DateUtil.daY_NAMES.length; i++) {
                var day_name = js.com.cs.v2.Util.DateUtil.daY_NAMES[i];
                if (val.substring(i_val, i_val + day_name.length).toLowerCase() === day_name.toLowerCase()) {
                    i_val += day_name.length;
                    break;
                }
            }
        }
        else if (token === 'MM' || token === 'M') {
            month = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (month == null || (month < 1) || (month > 12)) {
                return 0;
            }
            i_val += month.toString().length;
        }
        else if (token === 'dd' || token === 'd') {
            date = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (date == null || (date < 1) || (date > 31)) {
                return 0;
            }
            i_val += date.toString().length;
        }
        else if (token === 'hh' || token === 'h') {
            hh = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 1) || (hh > 12)) {
                return 0;
            }
            i_val += hh.toString().length;
        }
        else if (token === 'HH' || token === 'H') {
            hh = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 0) || (hh > 23)) {
                return 0;
            }
            i_val += hh.toString().length;
        }
        else if (token === 'KK' || token === 'K') {
            hh = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 0) || (hh > 11)) {
                return 0;
            }
            i_val += hh.toString().length;
        }
        else if (token === 'kk' || token === 'k') {
            hh = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 1) || (hh > 24)) {
                return 0;
            }
            i_val += hh.toString().length;
            hh--;
        }
        else if (token === 'mm' || token === 'm') {
            mm = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (mm == null || (mm < 0) || (mm > 59)) {
                return 0;
            }
            i_val += mm.toString().length;
        }
        else if (token === 'ss' || token === 's') {
            ss = js.com.cs.v2.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (ss == null || (ss < 0) || (ss > 59)) {
                return 0;
            }
            i_val += ss.toString().length;
        }
        else if (token === 'a') {
            if (val.substring(i_val, i_val + 2).toLowerCase() === 'am') {
                ampm = 'AM';
            }
            else if (val.substring(i_val, i_val + 2).toLowerCase() === 'pm') {
                ampm = 'PM';
            }
            else {
                return 0;
            }
            i_val += 2;
        }
        else {
            if (val.substring(i_val, i_val + token.length) !== token) {
                return 0;
            }
            else {
                i_val += token.length;
            }
        }
    }
    if (month === 2) {
        if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) {
            if (date > 29) {
                return 0;
            }
        }
        else {
            if (date > 28) {
                return 0;
            }
        }
    }
    if ((month === 4) || (month === 6) || (month === 9) || (month === 11)) {
        if (date > 30) {
            return 0;
        }
    }
    if (hh < 12 && ampm === 'PM') {
        hh = hh - 0 + 12;
    }
    else if (hh > 11 && ampm === 'AM') {
        hh -= 12;
    }
    var newdate = new Date(year, month - 1, date, hh, mm, ss);
    return newdate.getTime();
}
js.com.cs.v2.Util.DateUtil._parseDate = function js_com_cs_v2_Util_DateUtil$_parseDate(val, preferEuroFormat) {
    /// <param name="val" type="String">
    /// </param>
    /// <param name="preferEuroFormat" type="Boolean">
    /// </param>
    /// <returns type="Date"></returns>
    var preferEuro = (!isNullOrUndefined(preferEuroFormat)) ? preferEuroFormat : false;
    var generalFormats = [];
    (generalFormats).add('y-M-d');
    (generalFormats).add('MMM d, y');
    (generalFormats).add('MMM d,y');
    (generalFormats).add('y-MMM-d');
    (generalFormats).add('d-MMM-y');
    (generalFormats).add('MMM d');
    var monthFirst = [];
    var dateFirst = [];
    (monthFirst).add('M/d/y');
    (monthFirst).add('M-d-y');
    (monthFirst).add('M.d.y');
    (monthFirst).add('MMM-d');
    (monthFirst).add('M/d');
    (monthFirst).add('M-d');
    (dateFirst).add('d/M/y');
    (dateFirst).add('d-M-y');
    (dateFirst).add('d.M.y');
    (dateFirst).add('d-MMM');
    (dateFirst).add('d/M');
    (dateFirst).add('d-M');
    var checkList = [];
    (checkList).add(generalFormats);
    (checkList).add((preferEuro) ? dateFirst : monthFirst);
    (checkList).add((preferEuro) ? monthFirst : dateFirst);
    var d = null;
    for (var i = 0; i < checkList.length; i++) {
        var l = checkList[i];
        for (var j = 0; j < l.length; j++) {
            d = js.com.cs.v2.Util.DateUtil._getDateFromFormat(val, l[j]);
            if (d !== 0) {
                return new Date(d);
            }
        }
    }
    return null;
}
js.com.cs.v2.Util.DateUtil.parseStringToDate = function js_com_cs_v2_Util_DateUtil$parseStringToDate(value, dateFormat) {
    /// <param name="value" type="String">
    /// </param>
    /// <param name="dateFormat" type="String">
    /// </param>
    /// <returns type="Date"></returns>
    var time = js.com.cs.v2.Util.DateUtil._getDateFromFormat(value, dateFormat);
    if (time === 0) {
        return null;
    }
    return new Date(time);
}
js.com.cs.v2.Util.DateUtil.formatDate = function js_com_cs_v2_Util_DateUtil$formatDate(date, format) {
    /// <param name="date" type="Date">
    /// </param>
    /// <param name="format" type="String">
    /// </param>
    /// <returns type="String"></returns>
    return js.com.cs.v2.Util.DateUtil._formatDate(date, format);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.DojoToJQueryWrapper

js.com.cs.v2.Util.DojoToJQueryWrapper = function js_com_cs_v2_Util_DojoToJQueryWrapper() {
}
js.com.cs.v2.Util.DojoToJQueryWrapper.animateProperty = function js_com_cs_v2_Util_DojoToJQueryWrapper$animateProperty(node, duration, properties, onEnd) {
    /// <param name="node" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="duration" type="Number" integer="true">
    /// </param>
    /// <param name="properties" type="Object">
    /// </param>
    /// <param name="onEnd" type="DOMEventHandler">
    /// </param>
    /// <returns type="jQuery"></returns>
    return node.get_jQueryElement().animate(properties, duration, null, onEnd);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.query = function js_com_cs_v2_Util_DojoToJQueryWrapper$query(expression, context) {
    /// <param name="expression" type="String">
    /// </param>
    /// <param name="context" type="Object" domElement="true">
    /// </param>
    /// <returns type="jQuery"></returns>
    return js.com.JQueryScriptSharp.jQueryUtil.select(expression, context);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.marginBoxH = function js_com_cs_v2_Util_DojoToJQueryWrapper$marginBoxH(elem) {
    /// <param name="elem" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var domElem = new js.com.cs.v2.Controls.Common.MyDOMElement(elem);
    return domElem.get_jQueryElement().outerHeight(true);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.getMarginBox_W = function js_com_cs_v2_Util_DojoToJQueryWrapper$getMarginBox_W(elem) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return elem.get_jQueryElement().outerWidth(true);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.getMarginBox_H = function js_com_cs_v2_Util_DojoToJQueryWrapper$getMarginBox_H(elem) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return elem.get_jQueryElement().outerHeight(true);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.contentBox_W = function js_com_cs_v2_Util_DojoToJQueryWrapper$contentBox_W(elem) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return elem.get_jQueryElement().innerWidth();
}
js.com.cs.v2.Util.DojoToJQueryWrapper.contentBox_H = function js_com_cs_v2_Util_DojoToJQueryWrapper$contentBox_H(elem) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return elem.get_jQueryElement().innerHeight();
}
js.com.cs.v2.Util.DojoToJQueryWrapper.contentBox_Top = function js_com_cs_v2_Util_DojoToJQueryWrapper$contentBox_Top(elem) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return elem.get_jQueryElement().position().top;
}
js.com.cs.v2.Util.DojoToJQueryWrapper.contentBox_Left = function js_com_cs_v2_Util_DojoToJQueryWrapper$contentBox_Left(elem) {
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return elem.get_jQueryElement().position().left;
}
js.com.cs.v2.Util.DojoToJQueryWrapper.getViewPort_W = function js_com_cs_v2_Util_DojoToJQueryWrapper$getViewPort_W() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.WindowUtil.getViewportWidth(true);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.getViewPort_H = function js_com_cs_v2_Util_DojoToJQueryWrapper$getViewPort_H() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.WindowUtil.getViewportHeight(true);
}
js.com.cs.v2.Util.DojoToJQueryWrapper.getViewPort_Top = function js_com_cs_v2_Util_DojoToJQueryWrapper$getViewPort_Top() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.WindowUtil.getScrollTop();
}
js.com.cs.v2.Util.DojoToJQueryWrapper.getViewPort_Left = function js_com_cs_v2_Util_DojoToJQueryWrapper$getViewPort_Left() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.WindowUtil.getScrollLeft();
}
js.com.cs.v2.Util.DojoToJQueryWrapper.xhrGet_IsCancelled = function js_com_cs_v2_Util_DojoToJQueryWrapper$xhrGet_IsCancelled(xml) {
    /// <param name="xml" type="XMLHttpRequest">
    /// </param>
    /// <returns type="Boolean"></returns>
    return false;
}
js.com.cs.v2.Util.DojoToJQueryWrapper.ajaxClass_XHR = function js_com_cs_v2_Util_DojoToJQueryWrapper$ajaxClass_XHR(url, qsParameters, onLoad, onError, handleAs) {
    /// <param name="url" type="String">
    /// </param>
    /// <param name="qsParameters" type="Object">
    /// </param>
    /// <param name="onLoad" type="js.com.JQueryScriptSharp.AjaxResponseHandler">
    /// </param>
    /// <param name="onError" type="js.com.JQueryScriptSharp.AjaxResponseHandler">
    /// NOT USED!
    /// </param>
    /// <param name="handleAs" type="String">
    /// "xml", "html", "script", "json", "jsonp", or "text".
    /// </param>
    /// <returns type="XMLHttpRequest"></returns>
    var helperClass = new js.com.cs.v2.Util.DojoToJQuery.XhrGetHelperClass(onLoad, onError);
    var xml = jQuery.get(url, qsParameters, Delegate.create(helperClass, helperClass.xmlHttpRequest_OnLoad), handleAs);
    helperClass.xmlHttpRequest = xml;
    return xml;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.DOMUtil

js.com.cs.v2.Util.DOMUtil = function js_com_cs_v2_Util_DOMUtil() {
    /// <field name="_DOCUMENT" type="js.com.cs.v2.Controls.Common.MyDOMElement" static="true">
    /// </field>
    /// <field name="_BODY" type="js.com.cs.v2.Controls.Common.MyDOMElement" static="true">
    /// </field>
}
js.com.cs.v2.Util.DOMUtil.get_document = function js_com_cs_v2_Util_DOMUtil$get_document() {
    /// <value type="js.com.cs.v2.Controls.Common.MyDOMElement"></value>
    if (js.com.cs.v2.Util.DOMUtil._DOCUMENT == null) {
        js.com.cs.v2.Util.DOMUtil._DOCUMENT = new js.com.cs.v2.Controls.Common.MyDOMElement(js.com.JQueryScriptSharp.jQueryUtil.select(document));
    }
    return js.com.cs.v2.Util.DOMUtil._DOCUMENT;
}
js.com.cs.v2.Util.DOMUtil.replaceNodeInDom = function js_com_cs_v2_Util_DOMUtil$replaceNodeInDom(node, replaceWith) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <param name="replaceWith" type="Object" domElement="true">
    /// </param>
    var myNode = new js.com.cs.v2.Controls.Common.MyDOMElement(node);
    myNode.get_jQueryElement().replaceWith(replaceWith);
}
js.com.cs.v2.Util.DOMUtil.get_body = function js_com_cs_v2_Util_DOMUtil$get_body() {
    /// <value type="js.com.cs.v2.Controls.Common.MyDOMElement"></value>
    if (js.com.cs.v2.Util.DOMUtil._BODY == null) {
        js.com.cs.v2.Util.DOMUtil._BODY = new js.com.cs.v2.Controls.Common.MyDOMElement(js.com.JQueryScriptSharp.jQueryUtil.select('body'));
    }
    return js.com.cs.v2.Util.DOMUtil._BODY;
}
js.com.cs.v2.Util.DOMUtil._isChildOf = function js_com_cs_v2_Util_DOMUtil$_isChildOf(child, parent) {
    /// <param name="child" type="Object" domElement="true">
    /// </param>
    /// <param name="parent" type="Object" domElement="true">
    /// </param>
    /// <returns type="Boolean"></returns>
    var childParent = child.parentNode;
    if (childParent === parent) {
        return true;
    }
    else if (childParent == null) {
        return false;
    }
    else {
        return js.com.cs.v2.Util.DOMUtil._isChildOf(childParent, parent);
    }
}
js.com.cs.v2.Util.DOMUtil.isChildOf = function js_com_cs_v2_Util_DOMUtil$isChildOf(child, parent) {
    /// <param name="child" type="Object" domElement="true">
    /// </param>
    /// <param name="parent" type="Object" domElement="true">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v2.Util.DOMUtil._isChildOf(child, parent);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.EventUtil

js.com.cs.v2.Util.EventUtil = function js_com_cs_v2_Util_EventUtil() {
}
js.com.cs.v2.Util.EventUtil.preventDefault = function js_com_cs_v2_Util_EventUtil$preventDefault(e) {
    /// <param name="e" type="Event">
    /// </param>
    e.preventDefault();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.FileUtil

js.com.cs.v2.Util.FileUtil = function js_com_cs_v2_Util_FileUtil() {
}
js.com.cs.v2.Util.FileUtil.isImage = function js_com_cs_v2_Util_FileUtil$isImage(fileName) {
    /// <param name="fileName" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    fileName = fileName.toLowerCase();
    return (fileName.endsWith('.jpg') || fileName.endsWith('.jpeg') || fileName.endsWith('.bmp') || fileName.endsWith('.tiff') || fileName.endsWith('.png') || fileName.endsWith('.gif') || fileName.endsWith('.tif'));
}
js.com.cs.v2.Util.FileUtil.isSWF = function js_com_cs_v2_Util_FileUtil$isSWF(fileName) {
    /// <param name="fileName" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    fileName = fileName.toLowerCase();
    return fileName.endsWith('.swf');
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.FormUtil

js.com.cs.v2.Util.FormUtil = function js_com_cs_v2_Util_FormUtil() {
}
js.com.cs.v2.Util.FormUtil.updateCurrentFormActionToCurrentBrowserUrl = function js_com_cs_v2_Util_FormUtil$updateCurrentFormActionToCurrentBrowserUrl() {
    var forms = document.getElementsByTagName('form');
    for (var i = 0; i < forms.length; i++) {
        var form = forms[0];
        form.action = window.location.toString();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.GeneralUtil

js.com.cs.v2.Util.GeneralUtil = function js_com_cs_v2_Util_GeneralUtil() {
}
js.com.cs.v2.Util.GeneralUtil.getChildControls = function js_com_cs_v2_Util_GeneralUtil$getChildControls(elem) {
    /// <summary>
    /// Returns all the child controls in one list
    /// </summary>
    /// <param name="elem" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Array" elementType="MyDOMElement"></returns>
    if (Type.canCast(elem, Object)) {
        elem = new js.com.cs.v2.Controls.Common.MyDOMElement(elem);
    }
    var list = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    var curr = elem;
    list.push(curr);
    for (var i = 0; i < elem.get_domElement().children.length; i++) {
        var currList = js.com.cs.v2.Util.GeneralUtil.getChildControls(elem.get_domElement().children[i]);
        for (var j = 0; j < currList.length; j++) {
            list.push(currList[j]);
        }
    }
    return list.getBaseArray();
}
js.com.cs.v2.Util.GeneralUtil.compareDelegate = function js_com_cs_v2_Util_GeneralUtil$compareDelegate(delegateA, delegateB) {
    /// <summary>
    /// Checks whether two delegates in JS are exactly the same delegate
    /// </summary>
    /// <param name="delegateA" type="Delegate">
    /// </param>
    /// <param name="delegateB" type="Delegate">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (delegateA == null && delegateB == null) {
        return true;
    }
    if (delegateA == null || delegateB == null) {
        return false;
    }
    var targetsA = delegateA._targets;
    var targetsB = delegateB._targets;
    if (isNullOrUndefined(targetsA) && isNullOrUndefined(targetsB)) {
        return true;
    }
    else if (!isNullOrUndefined(targetsA) && !isNullOrUndefined(targetsB)) {
        return targetsA[0] === targetsB[0] && targetsA[1] === targetsB[1];
    }
    else {
        return false;
    }
}
js.com.cs.v2.Util.GeneralUtil.getDelegateFunction = function js_com_cs_v2_Util_GeneralUtil$getDelegateFunction(d) {
    /// <param name="d" type="Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    if (!isNullOrUndefined(targets)) {
        return targets[1];
    }
    else {
        return null;
    }
}
js.com.cs.v2.Util.GeneralUtil.getDelegateScope = function js_com_cs_v2_Util_GeneralUtil$getDelegateScope(d) {
    /// <param name="d" type="Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    if (!isNullOrUndefined(targets)) {
        return targets[0];
    }
    else {
        return null;
    }
}
js.com.cs.v2.Util.GeneralUtil.getActualDelegate = function js_com_cs_v2_Util_GeneralUtil$getActualDelegate(delegateFn) {
    /// <param name="delegateFn" type="Delegate">
    /// </param>
    /// <returns type="Delegate"></returns>
    var targetsA = delegateFn._targets;
    return targetsA[1];
}
js.com.cs.v2.Util.GeneralUtil.hitch = function js_com_cs_v2_Util_GeneralUtil$hitch(scope, fn) {
    /// <param name="scope" type="Object">
    /// </param>
    /// <param name="fn" type="Function">
    /// </param>
    /// <returns type="Function"></returns>
    var f = function() { fn.apply(scope, arguments); };
    return f;
}
js.com.cs.v2.Util.GeneralUtil.getOutherWidth = function js_com_cs_v2_Util_GeneralUtil$getOutherWidth(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.JQueryScriptSharp.jQueryUtil.selectByElements(element).outerWidth(true);
}
js.com.cs.v2.Util.GeneralUtil.getOuterHeight = function js_com_cs_v2_Util_GeneralUtil$getOuterHeight(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.JQueryScriptSharp.jQueryUtil.selectByElements(element).outerHeight(true);
}
js.com.cs.v2.Util.GeneralUtil.isIE = function js_com_cs_v2_Util_GeneralUtil$isIE() {
    /// <summary>
    /// Returns IE version, 0 if not IE
    /// </summary>
    /// <returns type="Number" integer="true"></returns>
    if (jQuery.browser.msie) {
        return Number.parse(jQuery.browser.version.substring(0, 1));
    }
    return 0;
}
js.com.cs.v2.Util.GeneralUtil.isIE6 = function js_com_cs_v2_Util_GeneralUtil$isIE6() {
    /// <returns type="Boolean"></returns>
    var ieVersion = js.com.cs.v2.Util.GeneralUtil.isIE();
    return ieVersion !== 0 && ieVersion < 7;
}
js.com.cs.v2.Util.GeneralUtil.domElementExists = function js_com_cs_v2_Util_GeneralUtil$domElementExists(id) {
    /// <param name="id" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return !isNullOrUndefined(id) && js.com.JQueryScriptSharp.jQueryUtil.selectById(id).length > 0;
}
js.com.cs.v2.Util.GeneralUtil.encodeURIComponent = function js_com_cs_v2_Util_GeneralUtil$encodeURIComponent(value) {
    /// <param name="value" type="Object">
    /// </param>
    /// <returns type="String"></returns>
    return encodeURIComponent(value);
}
js.com.cs.v2.Util.GeneralUtil.decodeURIComponent = function js_com_cs_v2_Util_GeneralUtil$decodeURIComponent(value) {
    /// <param name="value" type="Object">
    /// </param>
    /// <returns type="String"></returns>
    return decodeURIComponent(value);
}
js.com.cs.v2.Util.GeneralUtil.copyPropertiesFromToObject = function js_com_cs_v2_Util_GeneralUtil$copyPropertiesFromToObject(fromObj, toObj) {
    /// <param name="fromObj" type="Object">
    /// </param>
    /// <param name="toObj" type="Object">
    /// </param>
    var toDict = toObj;
    var $dict1 = fromObj;
    for (var $key2 in $dict1) {
        var x = { key: $key2, value: $dict1[$key2] };
        toDict[x.key] = x.value;
    }
}
js.com.cs.v2.Util.GeneralUtil.disableAllFields = function js_com_cs_v2_Util_GeneralUtil$disableAllFields(container, disable) {
    /// <param name="container" type="jQuery">
    /// </param>
    /// <param name="disable" type="Boolean">
    /// </param>
    if (Type.canCast(container, js.com.cs.v2.Controls.Common.MyDOMElement)) {
        container = (container).get_jQueryElement();
    }
    js.com.JQueryScriptSharp.jQueryUtil.select('input,select,textarea', container).attr('disabled', ((disable) ? 'disabled' : null));
}
js.com.cs.v2.Util.GeneralUtil.alert = function js_com_cs_v2_Util_GeneralUtil$alert(obj) {
    /// <param name="obj" type="Object">
    /// </param>
    alert(obj);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.JQueryPluginsUtil

js.com.cs.v2.Util.JQueryPluginsUtil = function js_com_cs_v2_Util_JQueryPluginsUtil() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.jQueryPrettyPhotoUtil

js.com.cs.v2.Util.jQueryPrettyPhotoUtil = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil() {
    /// <field name="__onChangeItem" type="DOMEventHandler" static="true">
    /// </field>
    /// <field name="__onClose" type="DOMEventHandler" static="true">
    /// </field>
    /// <field name="_TEMP_SETTINGS" type="js.com.JQueryScriptSharp._PrettyPhotoSettings" static="true">
    /// </field>
    /// <field name="_INLINE_CONTENT_COUNT" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_INIT_INLINE_CONTENT_GC" type="Boolean" static="true">
    /// </field>
    /// <field name="_INLINE_CONTENT_CONTAINERS_IDS" type="Array" elementType="String" static="true">
    /// </field>
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.add_onChangeItem = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$add_onChangeItem(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem = Delegate.combine(js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem, value);
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.remove_onChangeItem = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$remove_onChangeItem(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem = Delegate.remove(js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem, value);
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.add_onClose = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$add_onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose = Delegate.combine(js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose, value);
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.remove_onClose = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$remove_onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose = Delegate.remove(js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose, value);
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$get__prettyPhotoInstance() {
    /// <value type="Object"></value>
    return jQuery.prettyPhoto;
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.open = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$open(item, title, desc) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="desc" type="String">
    /// </param>
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().open(item, title, desc);
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.openInlineContent = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$openInlineContent(content, title, desc, contentWidthCss, contentHeightCss) {
    /// <summary>
    /// This will place the INNER CONTENT of the specified id not the entire ID
    /// so make sure that that particular item is either hidden but not its content
    /// It is very important that this container will have an ID specified, if not a random one is generated
    /// </summary>
    /// <param name="content" type="js.com.cs.v2.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="desc" type="String">
    /// </param>
    /// <param name="contentWidthCss" type="String">
    /// </param>
    /// <param name="contentHeightCss" type="String">
    /// </param>
    if (!js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INIT_INLINE_CONTENT_GC) {
        js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INIT_INLINE_CONTENT_GC = true;
        js.com.cs.v2.Util.jQueryPrettyPhotoUtil.add_onChangeItem(Delegate.create(null, js.com.cs.v2.Util.jQueryPrettyPhotoUtil._jQueryPrettyPhotoUtil_OnChangeItem));
    }
    var divContainer = new js.com.cs.v2.Controls.Common.MyDivElement();
    divContainer.appendChild(content);
    if (!String.isNullOrEmpty(contentWidthCss)) {
        divContainer.get_jQueryElement().css('width', contentWidthCss);
    }
    if (!String.isNullOrEmpty(contentHeightCss)) {
        divContainer.get_jQueryElement().css('height', contentHeightCss);
    }
    divContainer.set_id('prettyphoto-inline-' + js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_COUNT);
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_COUNT++;
    document.body.appendChild(divContainer.get_domElement());
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.open('#' + divContainer.get_id(), title, desc);
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS[js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS.length] = divContainer.get_id();
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._clearInlineContentContainers = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$_clearInlineContentContainers() {
    var a = js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS;
    while (a.length > 0) {
        var itemID = a.pop();
        var jQueryItem = js.com.JQueryScriptSharp.jQueryUtil.selectById(itemID);
        jQueryItem.remove();
    }
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._jQueryPrettyPhotoUtil_OnChangeItem = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$_jQueryPrettyPhotoUtil_OnChangeItem() {
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil._clearInlineContentContainers();
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.nextPage = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$nextPage() {
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().changePage('next');
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.prevPage = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$prevPage() {
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().changePage('previous');
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.close = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$close() {
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().close();
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._initPrettyPhoto = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$_initPrettyPhoto() {
    js.com.JQueryScriptSharp.jQueryUtil.select('a[rel^=\'prettyPhoto\']').prettyPhoto(js.com.cs.v2.Util.jQueryPrettyPhotoUtil._TEMP_SETTINGS);
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._prettyPhotoChange = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$_prettyPhotoChange() {
    if (js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem != null) {
        js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem.invoke();
    }
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._prettyPhotoClose = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$_prettyPhotoClose() {
    if (js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose != null) {
        js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose.invoke();
    }
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.initPrettyPhoto = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$initPrettyPhoto(settings) {
    /// <param name="settings" type="js.com.JQueryScriptSharp._PrettyPhotoSettings">
    /// </param>
    if (isNullOrUndefined(settings)) {
        settings = {};
    }
    if (isNullOrUndefined(settings.callback)) {
        settings.callback = Delegate.create(null, js.com.cs.v2.Util.jQueryPrettyPhotoUtil._prettyPhotoClose);
    }
    if (isNullOrUndefined(settings.changepicturecallback)) {
        settings.changepicturecallback = Delegate.create(null, js.com.cs.v2.Util.jQueryPrettyPhotoUtil._prettyPhotoChange);
    }
    js.com.cs.v2.Util.jQueryPrettyPhotoUtil._TEMP_SETTINGS = settings;
    js.com.JQueryScriptSharp.jQueryUtil.addOnReadyCallback(Delegate.create(null, js.com.cs.v2.Util.jQueryPrettyPhotoUtil._initPrettyPhoto));
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.getPrettyPhotoLink = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$getPrettyPhotoLink(itemURL, width, height) {
    /// <param name="itemURL" type="String">
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    itemURL = itemURL.toLowerCase();
    var qs = new js.com.cs.v2.Classes.URL.QueryString();
    if (!js.com.cs.v2.Util.FileUtil.isImage(itemURL)) {
        qs.set_item('width', ((width === 0 || isNullOrUndefined(width)) ? '80%' : width.toString()));
        qs.set_item('height', ((height === 0 || isNullOrUndefined(height)) ? '80%' : height.toString()));
    }
    if (itemURL.endsWith('.pdf')) {
        qs.set_item('iframe', 'true');
    }
    else if (itemURL.endsWith('.flv')) {
        qs.set_item('flashvars', 'file=' + itemURL);
        var swfPath = js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.jW_PLAYER_PATH;
        itemURL = swfPath;
    }
    var url = itemURL;
    if (qs.get_count() > 0) {
        url += '?' + qs;
    }
    return url;
}
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.getPrettyPhotoSWFLink = function js_com_cs_v2_Util_jQueryPrettyPhotoUtil$getPrettyPhotoSWFLink(swfURL, flashVars, width, height) {
    /// <param name="swfURL" type="String">
    /// </param>
    /// <param name="flashVars" type="js.com.cs.v2.Classes.URL.QueryString">
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    var qs = new js.com.cs.v2.Classes.URL.QueryString();
    qs.set_item('width', ((width === 0 || isNullOrUndefined(width)) ? '80%' : width.toString()));
    qs.set_item('height', ((height === 0 || isNullOrUndefined(height)) ? '80%' : height.toString()));
    if (flashVars != null) {
        qs.set_item('flashvars', flashVars.toString());
    }
    var url = swfURL + '?' + qs.toString();
    return url;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.KeyboardUtil

js.com.cs.v2.Util.KeyboardUtil = function js_com_cs_v2_Util_KeyboardUtil() {
    /// <field name="_browseR_SHORTCUTS_DISABLED" type="Boolean" static="true">
    /// </field>
    /// <field name="_disableD_BROWSER_SHORTCUTS" type="Array" elementType="String" static="true">
    /// </field>
}
js.com.cs.v2.Util.KeyboardUtil._domDoc_onKeyPressWithEvent = function js_com_cs_v2_Util_KeyboardUtil$_domDoc_onKeyPressWithEvent(e) {
    /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
    /// </param>
    for (var i = 0; i < js.com.cs.v2.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS.length; i++) {
        var shortcut = js.com.cs.v2.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS[i];
        var requiresCtrl = shortcut.indexOf('ctrl') !== -1;
        var requiresAlt = shortcut.indexOf('alt') !== -1;
        var requiresShift = shortcut.indexOf('shift') !== -1;
        var items = shortcut.split('+');
        var c = items[items.length - 1].charAt(0);
        var cPressed = String.fromCharCode(e.which).charAt(0);
        if (cPressed === c && (!requiresCtrl || e.ctrlKey) && (!requiresCtrl || e.altKey) && (!requiresShift || e.shiftKey)) {
            e.preventDefault();
            break;
        }
    }
}
js.com.cs.v2.Util.KeyboardUtil.disableDefaultBrowserShortcut = function js_com_cs_v2_Util_KeyboardUtil$disableDefaultBrowserShortcut(shortcutKeys) {
    /// <summary>
    /// Disable  browser shortcut default
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    if (!js.com.cs.v2.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED) {
        var domDoc = new js.com.cs.v2.Controls.Common.MyDOMElement(document.documentElement);
        domDoc.add_onKeyPress(Delegate.create(null, js.com.cs.v2.Util.KeyboardUtil._domDoc_onKeyPressWithEvent));
        js.com.cs.v2.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED = true;
    }
    js.com.cs.v2.Util.KeyboardUtil.enableDefaultBrowserShortcut(shortcutKeys);
    js.com.cs.v2.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS[js.com.cs.v2.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS.length] = shortcutKeys.toLowerCase();
}
js.com.cs.v2.Util.KeyboardUtil.enableDefaultBrowserShortcut = function js_com_cs_v2_Util_KeyboardUtil$enableDefaultBrowserShortcut(shortcutKeys) {
    /// <summary>
    /// Re-enables a browser shortcut
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    js.com.cs.v2.Util.ArrayUtil.removeObjectsFromArray(js.com.cs.v2.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS, shortcutKeys);
}
js.com.cs.v2.Util.KeyboardUtil.addShortcutHandler = function js_com_cs_v2_Util_KeyboardUtil$addShortcutHandler(shortcutKeys, handler) {
    /// <summary>
    /// Add a keyboard combination shortcut.
    /// IMPORTANT: You must include shortcut.js in /_common/js/shortcuts/shortcut.js
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    /// <param name="handler" type="DOMEventHandler">
    /// Handler to call
    /// </param>
    var s = shortcut;
    s.add(shortcutKeys, handler);
    js.com.cs.v2.Util.KeyboardUtil.disableDefaultBrowserShortcut(shortcutKeys);
}
js.com.cs.v2.Util.KeyboardUtil.removeShortcutHandler = function js_com_cs_v2_Util_KeyboardUtil$removeShortcutHandler(shortcutKeys) {
    /// <summary>
    /// Removes a previously added shortcut
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    var s = shortcut;
    s.remove(shortcutKeys);
    js.com.cs.v2.Util.KeyboardUtil.enableDefaultBrowserShortcut(shortcutKeys);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.MouseUtil

js.com.cs.v2.Util.MouseUtil = function js_com_cs_v2_Util_MouseUtil() {
    /// <field name="_INIT" type="Boolean" static="true">
    /// </field>
    /// <field name="_mouseX" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_mouseY" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_mouseViewportX" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_mouseViewportY" type="Number" integer="true" static="true">
    /// </field>
}
js.com.cs.v2.Util.MouseUtil.get_mouseX = function js_com_cs_v2_Util_MouseUtil$get_mouseX() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v2.Util.MouseUtil.init();
    return js.com.cs.v2.Util.MouseUtil._mouseX;
}
js.com.cs.v2.Util.MouseUtil.get_mouseY = function js_com_cs_v2_Util_MouseUtil$get_mouseY() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v2.Util.MouseUtil.init();
    return js.com.cs.v2.Util.MouseUtil._mouseY;
}
js.com.cs.v2.Util.MouseUtil.get_mouseViewportX = function js_com_cs_v2_Util_MouseUtil$get_mouseViewportX() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v2.Util.MouseUtil.init();
    return js.com.cs.v2.Util.MouseUtil._mouseViewportX;
}
js.com.cs.v2.Util.MouseUtil.get_mouseViewportY = function js_com_cs_v2_Util_MouseUtil$get_mouseViewportY() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v2.Util.MouseUtil.init();
    return js.com.cs.v2.Util.MouseUtil._mouseViewportY;
}
js.com.cs.v2.Util.MouseUtil._checkMousePos = function js_com_cs_v2_Util_MouseUtil$_checkMousePos() {
    alert(js.com.cs.v2.Util.MouseUtil._mouseX + ', ' + js.com.cs.v2.Util.MouseUtil._mouseY + ' :: ' + js.com.cs.v2.Util.MouseUtil._mouseViewportX + ', ' + js.com.cs.v2.Util.MouseUtil._mouseViewportY);
}
js.com.cs.v2.Util.MouseUtil.init = function js_com_cs_v2_Util_MouseUtil$init() {
    if (!js.com.cs.v2.Util.MouseUtil._INIT) {
        js.com.cs.v2.Util.DOMUtil.get_document().add_onMouseMove(Delegate.create(null, js.com.cs.v2.Util.MouseUtil._DOCUMENT_onMouseMove));
        js.com.cs.v2.Util.MouseUtil._INIT = true;
    }
}
js.com.cs.v2.Util.MouseUtil._windowUtil_onMouseMove = function js_com_cs_v2_Util_MouseUtil$_windowUtil_onMouseMove() {
}
js.com.cs.v2.Util.MouseUtil._DOCUMENT_onMouseMove = function js_com_cs_v2_Util_MouseUtil$_DOCUMENT_onMouseMove(e) {
    /// <param name="e" type="js.com.JQueryScriptSharp.JQueryEvent">
    /// </param>
    js.com.cs.v2.Util.MouseUtil._mouseX = e.pageX;
    js.com.cs.v2.Util.MouseUtil._mouseY = e.pageY;
    js.com.cs.v2.Util.MouseUtil._mouseViewportX = js.com.cs.v2.Util.MouseUtil._mouseX - js.com.cs.v2.Util.WindowUtil.getScrollLeft();
    js.com.cs.v2.Util.MouseUtil._mouseViewportY = js.com.cs.v2.Util.MouseUtil._mouseY - js.com.cs.v2.Util.WindowUtil.getScrollTop();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.NumberUtil

js.com.cs.v2.Util.NumberUtil = function js_com_cs_v2_Util_NumberUtil() {
}
js.com.cs.v2.Util.NumberUtil.getPrice = function js_com_cs_v2_Util_NumberUtil$getPrice(price, decimalPlaces, currency) {
    /// <param name="price" type="Number">
    /// </param>
    /// <param name="decimalPlaces" type="Number" integer="true">
    /// </param>
    /// <param name="currency" type="String">
    /// </param>
    /// <returns type="String"></returns>
    if (isNullOrUndefined(decimalPlaces)) {
        decimalPlaces = 2;
    }
    if (isNullOrUndefined(currency)) {
        currency = '&euro;';
    }
    return currency + price.toFixed(decimalPlaces);
}
js.com.cs.v2.Util.NumberUtil.getNumberFromString = function js_com_cs_v2_Util_NumberUtil$getNumberFromString(str) {
    /// <summary>
    /// This will start parsing a string until it finds the first digit.  If it finds a digit, it will parse number
    /// </summary>
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Number"></returns>
    for (var i = 0; i < str.length; i++) {
        var currChar = str.charAt(i);
        if (js.com.cs.v2.Util.NumberUtil.isDigit(currChar)) {
            str = str.substring(i, str.length);
            return Number.parse(str);
        }
    }
    return 0;
}
js.com.cs.v2.Util.NumberUtil.isDigit = function js_com_cs_v2_Util_NumberUtil$isDigit(c) {
    /// <param name="c" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var code = c.charCodeAt(0);
    return (code >= 48 && code <= 57);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.PageUtil

js.com.cs.v2.Util.PageUtil = function js_com_cs_v2_Util_PageUtil() {
}
js.com.cs.v2.Util.PageUtil.getQuerystring = function js_com_cs_v2_Util_PageUtil$getQuerystring(key, defaultValue) {
    /// <param name="key" type="String">
    /// </param>
    /// <param name="defaultValue" type="String">
    /// </param>
    /// <returns type="String"></returns>
    if (defaultValue == null) {
        defaultValue = '';
    }
    var qs = new js.com.cs.v2.Classes.URL.QueryString(null);
    var val = qs.get_item(key);
    if (String.isNullOrEmpty(val)) {
        val = defaultValue;
    }
    return val;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.RandomUtil

js.com.cs.v2.Util.RandomUtil = function js_com_cs_v2_Util_RandomUtil() {
}
js.com.cs.v2.Util.RandomUtil.getRandomBool = function js_com_cs_v2_Util_RandomUtil$getRandomBool() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v2.Util.RandomUtil.getRandomNumber() < 0.5;
}
js.com.cs.v2.Util.RandomUtil.getRandomNumber = function js_com_cs_v2_Util_RandomUtil$getRandomNumber(from, to) {
    /// <param name="from" type="Number">
    /// </param>
    /// <param name="to" type="Number">
    /// </param>
    /// <returns type="Number"></returns>
    if (isNullOrUndefined(from) && isNullOrUndefined(to)) {
        return Math.random();
    }
    else if (!isNullOrUndefined(from) && isNullOrUndefined(to)) {
        to = from;
        from = 0;
    }
    var range = to - from;
    var n = Math.random() * range;
    return n + from;
}
js.com.cs.v2.Util.RandomUtil.getRandomInteger = function js_com_cs_v2_Util_RandomUtil$getRandomInteger(from, to) {
    /// <param name="from" type="Number" integer="true">
    /// </param>
    /// <param name="to" type="Number" integer="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return parseInt(((to - from) * js.com.cs.v2.Util.RandomUtil.getRandomNumber())) + from;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.StringUtil

js.com.cs.v2.Util.StringUtil = function js_com_cs_v2_Util_StringUtil() {
}
js.com.cs.v2.Util.StringUtil.countWords = function js_com_cs_v2_Util_StringUtil$countWords(s) {
    /// <param name="s" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.StringUtil.getWords(s).get_length();
}
js.com.cs.v2.Util.StringUtil.getWords = function js_com_cs_v2_Util_StringUtil$getWords(s) {
    /// <param name="s" type="String">
    /// </param>
    /// <returns type="js.com.cs.v2.Classes.General.Arrays.MyArray"></returns>
    var y = s;
    var regExp = new RegExp('\\s', 'g');
    var a = y.replace(regExp, ' ').split(' ');
    var words = new js.com.cs.v2.Classes.General.Arrays.MyArray();
    for (var z = 0; z < a.length; z++) {
        if (a[z].length > 0) {
            words.push(a[z]);
        }
    }
    return words;
}
js.com.cs.v2.Util.StringUtil.getWordIndex = function js_com_cs_v2_Util_StringUtil$getWordIndex(str, wordIndex) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="wordIndex" type="Number" integer="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var index = 0;
    var isWhiteSpace = true;
    for (var i = 0; i < str.length; i++) {
        var chr = str.charAt(i);
        if (chr === ' ' || chr === '\r' || chr === '\n' || chr === '\t') {
            isWhiteSpace = true;
        }
        else {
            if (isWhiteSpace) {
                isWhiteSpace = false;
                if (index === wordIndex) {
                    return i;
                }
                index++;
            }
        }
    }
    return -1;
}
js.com.cs.v2.Util.StringUtil.formatNumber = function js_com_cs_v2_Util_StringUtil$formatNumber(num, decimalPlaces) {
    /// <param name="num" type="Number">
    /// </param>
    /// <param name="decimalPlaces" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    return num.toFixed(decimalPlaces);
}
js.com.cs.v2.Util.StringUtil.trim = function js_com_cs_v2_Util_StringUtil$trim(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="String"></returns>
    return jQuery.trim(str);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util._SwfObjectParams

js.com.cs.v2.Util._SwfObjectParams = function js_com_cs_v2_Util__SwfObjectParams() {
    /// <field name="flashAttributes" type="Object">
    /// </field>
    /// <field name="flashParams" type="Object">
    /// </field>
    /// <field name="flashVars" type="Object">
    /// </field>
    /// <field name="expressInstallURL" type="String">
    /// </field>
    this.flashVars = {};
    this.flashParams = {};
    this.flashAttributes = {};
}
js.com.cs.v2.Util._SwfObjectParams.prototype = {
    flashAttributes: null,
    flashParams: null,
    flashVars: null,
    expressInstallURL: '/_common/flash/v1/swfobject/2.1/expressInstall.swf'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.SWFObjectUtil

js.com.cs.v2.Util.SWFObjectUtil = function js_com_cs_v2_Util_SWFObjectUtil() {
}
js.com.cs.v2.Util.SWFObjectUtil.initSWF = function js_com_cs_v2_Util_SWFObjectUtil$initSWF(flashURL, elementID, flashVersion, width, height, parameters, onReady) {
    /// <param name="flashURL" type="String">
    /// </param>
    /// <param name="elementID" type="String">
    /// </param>
    /// <param name="flashVersion" type="String">
    /// </param>
    /// <param name="width" type="String">
    /// </param>
    /// <param name="height" type="String">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v2.Util._SwfObjectParams">
    /// </param>
    /// <param name="onReady" type="DOMEventHandler">
    /// </param>
    var swfObject = swfobject;
    if (isNullOrUndefined(parameters)) {
        parameters = new js.com.cs.v2.Util._SwfObjectParams();
    }
    swfObject.embedSWF(flashURL, elementID, width, height, flashVersion, parameters.expressInstallURL, parameters.flashVars, parameters.flashParams, parameters.flashAttributes, onReady);
}
js.com.cs.v2.Util.SWFObjectUtil.hasFlashPlayerVersion = function js_com_cs_v2_Util_SWFObjectUtil$hasFlashPlayerVersion(version) {
    /// <param name="version" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var swfObject = swfobject;
    return swfObject.hasFlashPlayerVersion(version);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.URLUtil

js.com.cs.v2.Util.URLUtil = function js_com_cs_v2_Util_URLUtil() {
}
js.com.cs.v2.Util.URLUtil.removeQueryString = function js_com_cs_v2_Util_URLUtil$removeQueryString(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <returns type="String"></returns>
    if (url.indexOf('?') !== -1) {
        url = url.substring(0, url.indexOf('?'));
    }
    return url;
}
js.com.cs.v2.Util.URLUtil.getQueryString = function js_com_cs_v2_Util_URLUtil$getQueryString(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <returns type="String"></returns>
    if (url.indexOf('?') !== -1) {
        return url.substring(url.indexOf('?') + 1, url.length);
    }
    return url;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.WindowUtil

js.com.cs.v2.Util.WindowUtil = function js_com_cs_v2_Util_WindowUtil() {
    /// <field name="_scrollbaR_DEFAULT_SIZE" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_sNewWindowLocation" type="String" static="true">
    /// </field>
    /// <field name="_WINDOW" type="js.com.cs.v2.Controls.Common.MyDOMElement" static="true">
    /// </field>
    /// <field name="_SCROLLBAR_WIDTH" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_EVENTS_HANDLER" type="js.com.cs.v2.Events.GenericEventsHandler" static="true">
    /// </field>
}
js.com.cs.v2.Util.WindowUtil.get_windowElement = function js_com_cs_v2_Util_WindowUtil$get_windowElement() {
    /// <value type="js.com.cs.v2.Controls.Common.MyDOMElement"></value>
    if (js.com.cs.v2.Util.WindowUtil._WINDOW == null) {
        js.com.cs.v2.Util.WindowUtil._WINDOW = new js.com.cs.v2.Controls.Common.MyDOMElement(js.com.JQueryScriptSharp.jQueryUtil.select(window));
    }
    return js.com.cs.v2.Util.WindowUtil._WINDOW;
}
js.com.cs.v2.Util.WindowUtil.get_windowElementJQuery = function js_com_cs_v2_Util_WindowUtil$get_windowElementJQuery() {
    /// <value type="jQuery"></value>
    return jQuery(window);
}
js.com.cs.v2.Util.WindowUtil._bind = function js_com_cs_v2_Util_WindowUtil$_bind(type, data, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="data" type="Object">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharp.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(type);
    js.com.cs.v2.Util.WindowUtil._EVENTS_HANDLER.addListener(strType, callback);
    js.com.cs.v2.Util.WindowUtil.get_windowElementJQuery().bind(strType, data, callback);
}
js.com.cs.v2.Util.WindowUtil._unBind = function js_com_cs_v2_Util_WindowUtil$_unBind(type, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharp.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(type);
    var objDelegate = js.com.cs.v2.Util.WindowUtil._EVENTS_HANDLER.removeListener(strType, callback, true);
    js.com.cs.v2.Util.WindowUtil.get_windowElementJQuery().unbind(strType, objDelegate);
}
js.com.cs.v2.Util.WindowUtil.add_onScroll = function js_com_cs_v2_Util_WindowUtil$add_onScroll(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.scroll, js.com.cs.v2.Util.WindowUtil.get_windowElementJQuery(), value);
}
js.com.cs.v2.Util.WindowUtil.remove_onScroll = function js_com_cs_v2_Util_WindowUtil$remove_onScroll(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.scroll, value);
}
js.com.cs.v2.Util.WindowUtil._bindEventToBody = function js_com_cs_v2_Util_WindowUtil$_bindEventToBody(type, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharp.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(type);
    js.com.cs.v2.Util.WindowUtil._EVENTS_HANDLER.addListener(strType, callback);
    var body = js.com.JQueryScriptSharp.jQueryUtil.select('body');
    body.bind(strType, body, callback);
}
js.com.cs.v2.Util.WindowUtil._unBindEventToBody = function js_com_cs_v2_Util_WindowUtil$_unBindEventToBody(type, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharp.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharp.JQueryEnums.eventTypeToString(type);
    var objDelegate = js.com.cs.v2.Util.WindowUtil._EVENTS_HANDLER.removeListener(strType, callback, true);
    js.com.JQueryScriptSharp.jQueryUtil.select('body').unbind(strType, objDelegate);
}
js.com.cs.v2.Util.WindowUtil.add_onMouseMove = function js_com_cs_v2_Util_WindowUtil$add_onMouseMove(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._bindEventToBody(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseMove, value);
}
js.com.cs.v2.Util.WindowUtil.remove_onMouseMove = function js_com_cs_v2_Util_WindowUtil$remove_onMouseMove(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._unBindEventToBody(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseMove, value);
}
js.com.cs.v2.Util.WindowUtil.add_onMouseUp = function js_com_cs_v2_Util_WindowUtil$add_onMouseUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._bindEventToBody(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseUp, value);
}
js.com.cs.v2.Util.WindowUtil.remove_onMouseUp = function js_com_cs_v2_Util_WindowUtil$remove_onMouseUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._unBindEventToBody(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.mouseUp, value);
}
js.com.cs.v2.Util.WindowUtil.add_onKeyUp = function js_com_cs_v2_Util_WindowUtil$add_onKeyUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._bindEventToBody(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyUp, value);
}
js.com.cs.v2.Util.WindowUtil.remove_onKeyUp = function js_com_cs_v2_Util_WindowUtil$remove_onKeyUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._unBindEventToBody(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.keyUp, value);
}
js.com.cs.v2.Util.WindowUtil.add_onResize = function js_com_cs_v2_Util_WindowUtil$add_onResize(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._bind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.resize, js.com.cs.v2.Util.WindowUtil.get_windowElementJQuery(), value);
}
js.com.cs.v2.Util.WindowUtil.remove_onResize = function js_com_cs_v2_Util_WindowUtil$remove_onResize(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v2.Util.WindowUtil._unBind(js.com.JQueryScriptSharp.JQUERY_EVENT_TYPE.resize, value);
}
js.com.cs.v2.Util.WindowUtil._changeLocation = function js_com_cs_v2_Util_WindowUtil$_changeLocation(newLocation) {
    /// <param name="newLocation" type="String">
    /// </param>
    var windowLocation = window;
    windowLocation.location = newLocation;
}
js.com.cs.v2.Util.WindowUtil._callChangeLocation = function js_com_cs_v2_Util_WindowUtil$_callChangeLocation() {
    js.com.cs.v2.Util.WindowUtil._changeLocation(js.com.cs.v2.Util.WindowUtil._sNewWindowLocation);
}
js.com.cs.v2.Util.WindowUtil.changeLocation = function js_com_cs_v2_Util_WindowUtil$changeLocation(newLocation) {
    /// <param name="newLocation" type="String">
    /// </param>
    js.com.cs.v2.Util.WindowUtil._sNewWindowLocation = newLocation;
    window.setTimeout(Delegate.create(null, js.com.cs.v2.Util.WindowUtil._callChangeLocation), 50);
}
js.com.cs.v2.Util.WindowUtil.redirectParentFrame = function js_com_cs_v2_Util_WindowUtil$redirectParentFrame(url) {
    /// <param name="url" type="String">
    /// </param>
    window.parent.location.href = url;
}
js.com.cs.v2.Util.WindowUtil.getPageHeight = function js_com_cs_v2_Util_WindowUtil$getPageHeight() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.DOMUtil.get_document().get_jQueryElement().height();
}
js.com.cs.v2.Util.WindowUtil.getPageWidth = function js_com_cs_v2_Util_WindowUtil$getPageWidth() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.DOMUtil.get_document().get_jQueryElement().width();
}
js.com.cs.v2.Util.WindowUtil.getViewportWidth = function js_com_cs_v2_Util_WindowUtil$getViewportWidth(excludeScrollbars) {
    /// <param name="excludeScrollbars" type="Boolean">
    /// Wheter to include scrollbars or not.
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (isNullOrUndefined(excludeScrollbars)) {
        excludeScrollbars = true;
    }
    var w = window.innerWidth ? window.innerWidth : jQuery(window).width();
    if (excludeScrollbars && js.com.cs.v2.Util.WindowUtil.hasVerticalScrollbars()) {
        if (js.com.cs.v2.Util.GeneralUtil.isIE() === 0) {
            w -= js.com.cs.v2.Util.WindowUtil.getScrollbarSize();
        }
    }
    return w;
}
js.com.cs.v2.Util.WindowUtil.getViewportHeight = function js_com_cs_v2_Util_WindowUtil$getViewportHeight(excludeScrollbars) {
    /// <param name="excludeScrollbars" type="Boolean">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (isNullOrUndefined(excludeScrollbars)) {
        excludeScrollbars = true;
    }
    var h = window.innerHeight ? window.innerHeight : jQuery(window).height();
    if (excludeScrollbars && js.com.cs.v2.Util.WindowUtil.hasHorizontalScrollbars()) {
        if (js.com.cs.v2.Util.GeneralUtil.isIE() === 0) {
            h -= js.com.cs.v2.Util.WindowUtil.getScrollbarSize();
        }
    }
    return h;
}
js.com.cs.v2.Util.WindowUtil.getScrollLeft = function js_com_cs_v2_Util_WindowUtil$getScrollLeft() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.DOMUtil.get_document().get_jQueryElement().scrollLeft();
}
js.com.cs.v2.Util.WindowUtil.getScrollTop = function js_com_cs_v2_Util_WindowUtil$getScrollTop() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v2.Util.DOMUtil.get_document().get_jQueryElement().scrollTop();
}
js.com.cs.v2.Util.WindowUtil.refresh = function js_com_cs_v2_Util_WindowUtil$refresh(addToHistory) {
    /// <param name="addToHistory" type="Boolean">
    /// </param>
    if (addToHistory) {
        window.location.href = unescape(window.location.pathname);
    }
    else {
        window.location.replace(unescape(window.location.pathname));
    }
}
js.com.cs.v2.Util.WindowUtil.hasVerticalScrollbars = function js_com_cs_v2_Util_WindowUtil$hasVerticalScrollbars() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v2.Util.WindowUtil.getPageHeight() > js.com.cs.v2.Util.WindowUtil.getViewportHeight(false);
}
js.com.cs.v2.Util.WindowUtil.hasHorizontalScrollbars = function js_com_cs_v2_Util_WindowUtil$hasHorizontalScrollbars() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v2.Util.WindowUtil.getPageWidth() > js.com.cs.v2.Util.WindowUtil.getViewportWidth(false);
}
js.com.cs.v2.Util.WindowUtil.getScrollbarSize = function js_com_cs_v2_Util_WindowUtil$getScrollbarSize() {
    /// <summary>
    /// Returns the size in px of this browsers scrollbar
    /// </summary>
    /// <returns type="Number" integer="true"></returns>
    if (js.com.cs.v2.Util.WindowUtil._SCROLLBAR_WIDTH === -1) {
        var div = js.com.JQueryScriptSharp.jQueryUtil.createElementFromHTML('<div style=\'width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;\'><div style=\'height:100px;\'></div>');
        js.com.JQueryScriptSharp.jQueryUtil.select('body').append(div);
        var w1 = js.com.JQueryScriptSharp.jQueryUtil.select('div', div).innerWidth();
        div.css('overflow-y', 'scroll');
        var w2 = js.com.JQueryScriptSharp.jQueryUtil.select('div', div).innerWidth();
        js.com.cs.v2.Util.WindowUtil._SCROLLBAR_WIDTH = w1 - w2;
    }
    return (js.com.cs.v2.Util.WindowUtil._SCROLLBAR_WIDTH === 0) ? js.com.cs.v2.Util.WindowUtil._scrollbaR_DEFAULT_SIZE : js.com.cs.v2.Util.WindowUtil._SCROLLBAR_WIDTH;
}
js.com.cs.v2.Util.WindowUtil._getPopupBoolValue = function js_com_cs_v2_Util_WindowUtil$_getPopupBoolValue(b) {
    /// <param name="b" type="Boolean">
    /// </param>
    /// <returns type="String"></returns>
    return (b) ? 'yes' : 'no';
}
js.com.cs.v2.Util.WindowUtil.openPopup = function js_com_cs_v2_Util_WindowUtil$openPopup(url, windowName, width, height, scrollbars, locationBar, directories, statusBar, menuBar, toolBar, resizeable, position) {
    /// <param name="url" type="String">
    /// </param>
    /// <param name="windowName" type="String">
    /// </param>
    /// <param name="width" type="String">
    /// </param>
    /// <param name="height" type="String">
    /// </param>
    /// <param name="scrollbars" type="Boolean">
    /// </param>
    /// <param name="locationBar" type="Boolean">
    /// </param>
    /// <param name="directories" type="Boolean">
    /// </param>
    /// <param name="statusBar" type="Boolean">
    /// </param>
    /// <param name="menuBar" type="Boolean">
    /// </param>
    /// <param name="toolBar" type="Boolean">
    /// </param>
    /// <param name="resizeable" type="Boolean">
    /// </param>
    /// <param name="position" type="js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION">
    /// center / random / null
    /// </param>
    var leftPos;
    var topPos;
    var nWidth;
    var nHeight;
    if (width.indexOf('%') !== -1) {
        var perc = Number.parse(width);
        nWidth = Math.truncate(perc) / 100 * js.com.cs.v2.Util.WindowUtil.getScreenWidth();
    }
    else {
        nWidth = Number.parse(width);
    }
    if (height.indexOf('%') !== -1) {
        var perc = Number.parse(height);
        nHeight = Math.truncate(perc) / 100 * js.com.cs.v2.Util.WindowUtil.getScreenHeight();
    }
    else {
        nHeight = Number.parse(height);
    }
    if (position === js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION.random) {
        leftPos = Math.floor(Math.random() * (js.com.cs.v2.Util.WindowUtil.getScreenWidth() - nWidth));
        topPos = Math.floor(Math.random() * (js.com.cs.v2.Util.WindowUtil.getScreenHeight() - nHeight));
    }
    else if (position === js.com.cs.v2.Util.POPUP_WINDOW_OPEN_POSITION.center) {
        leftPos = (js.com.cs.v2.Util.WindowUtil.getScreenWidth() - nWidth) / 2;
        topPos = (js.com.cs.v2.Util.WindowUtil.getScreenHeight() - nHeight) / 2;
    }
    else {
        leftPos = 0;
        topPos = 20;
    }
    var settings = 'width=' + nWidth + ',height=' + nHeight + ',top=' + topPos + ',left=' + leftPos + ',scrollbars=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(scrollbars) + ',location=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(locationBar) + ',directories=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(directories) + ',status=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(statusBar) + ',menubar=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(menuBar) + ',toolbar=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(toolBar) + ',resizable=' + js.com.cs.v2.Util.WindowUtil._getPopupBoolValue(resizeable);
    window.open(url, windowName, settings);
}
js.com.cs.v2.Util.WindowUtil.getScreenWidth = function js_com_cs_v2_Util_WindowUtil$getScreenWidth() {
    /// <returns type="Number" integer="true"></returns>
    return screen.width;
}
js.com.cs.v2.Util.WindowUtil.getScreenHeight = function js_com_cs_v2_Util_WindowUtil$getScreenHeight() {
    /// <returns type="Number" integer="true"></returns>
    return screen.height;
}
js.com.cs.v2.Util.WindowUtil.scrollToWithPlugin = function js_com_cs_v2_Util_WindowUtil$scrollToWithPlugin(elemToScrollTo, duration) {
    /// <param name="elemToScrollTo" type="Object" domElement="true">
    /// </param>
    /// <param name="duration" type="Number" integer="true">
    /// </param>
    var jquery = jQuery;
    jquery.scrollTo(elemToScrollTo, duration);
}


Type.createNamespace('js.com.cs.v2.Util.DojoToJQuery');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v2.Util.DojoToJQuery.XhrGetHelperClass

js.com.cs.v2.Util.DojoToJQuery.XhrGetHelperClass = function js_com_cs_v2_Util_DojoToJQuery_XhrGetHelperClass(onLoad, onError) {
    /// <param name="onLoad" type="js.com.JQueryScriptSharp.AjaxResponseHandler">
    /// </param>
    /// <param name="onError" type="js.com.JQueryScriptSharp.AjaxResponseHandler">
    /// </param>
    /// <field name="xmlHttpRequest" type="XMLHttpRequest">
    /// </field>
    /// <field name="onLoad" type="js.com.JQueryScriptSharp.AjaxResponseHandler">
    /// </field>
    /// <field name="onError" type="js.com.JQueryScriptSharp.AjaxResponseHandler">
    /// </field>
    this.onError = onError;
    this.onLoad = onLoad;
}
js.com.cs.v2.Util.DojoToJQuery.XhrGetHelperClass.prototype = {
    xmlHttpRequest: null,
    onLoad: null,
    onError: null,
    
    xmlHttpRequest_OnLoad: function js_com_cs_v2_Util_DojoToJQuery_XhrGetHelperClass$xmlHttpRequest_OnLoad(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        if (textStatus === 'success') {
            this.onLoad.invoke(data, textStatus);
        }
        else {
            this.onError.invoke(data, textStatus);
        }
    }
}


js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress.createClass('js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress');
js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu.createClass('js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenu');
js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox.createClass('js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuComboBox');
js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel.createClass('js.com.cs.v2.Classes.Forms.linkedMenu.LinkedMenuLevel');
js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit.createClass('js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit');
js.com.cs.v2.Classes.Forms.Validation.CharsLimit.createClass('js.com.cs.v2.Classes.Forms.Validation.CharsLimit', js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit);
js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS.createClass('js.com.cs.v2.Classes.Forms.Validation.VALIDATION_PARAMETERS');
js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG.createClass('js.com.cs.v2.Classes.Forms.Validation.OUTPUT_ERROR_MSG');
js.com.cs.v2.Classes.Forms.Validation.Validation.createClass('js.com.cs.v2.Classes.Forms.Validation.Validation');
js.com.cs.v2.Classes.Forms.Validation.WordsLimit.createClass('js.com.cs.v2.Classes.Forms.Validation.WordsLimit', js.com.cs.v2.Classes.Forms.Validation.WordsOrCharsLimit);
js.com.cs.v2.Classes.General.Arrays.MyArray.createClass('js.com.cs.v2.Classes.General.Arrays.MyArray', null, IArray, IEnumerable);
js.com.cs.v2.Classes.General.Arrays.MyArrayInt.createClass('js.com.cs.v2.Classes.General.Arrays.MyArrayInt', js.com.cs.v2.Classes.General.Arrays.MyArray);
js.com.cs.v2.Classes.General.Arrays.MyArrayString.createClass('js.com.cs.v2.Classes.General.Arrays.MyArrayString', js.com.cs.v2.Classes.General.Arrays.MyArray);
js.com.cs.v2.Classes.General.GeneralClass.createClass('js.com.cs.v2.Classes.General.GeneralClass');
js.com.cs.v2.Classes.General.ListItem.createClass('js.com.cs.v2.Classes.General.ListItem');
js.com.cs.v2.Classes.Geom.Point.createClass('js.com.cs.v2.Classes.Geom.Point');
js.com.cs.v2.Classes.TimeSpan.createClass('js.com.cs.v2.Classes.TimeSpan');
js.com.cs.v2.Classes.URL.QueryString.createClass('js.com.cs.v2.Classes.URL.QueryString');
js.com.cs.v2.Classes.URL.URLHandler.createClass('js.com.cs.v2.Classes.URL.URLHandler');
js.com.cs.v2.Classes.Validation.ValueChecker.createClass('js.com.cs.v2.Classes.Validation.ValueChecker');
js.com.cs.v2.Controls.Common.MyDOMElement.createClass('js.com.cs.v2.Controls.Common.MyDOMElement', null, js.com.cs.v2.Controls.Common.IMyDOMElement, js.com.cs.v2.Interfaces.IDestroyable);
js.com.cs.v2.Controls.Common.MyAnchorElement.createClass('js.com.cs.v2.Controls.Common.MyAnchorElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyDivElement.createClass('js.com.cs.v2.Controls.Common.MyDivElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyFormElement.createClass('js.com.cs.v2.Controls.Common.MyFormElement', js.com.cs.v2.Controls.Common.MyDOMElement, js.com.cs.v2.Controls.Common.IMyDOMElement);
js.com.cs.v2.Controls.Common.MyImageElement.createClass('js.com.cs.v2.Controls.Common.MyImageElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyInputElement.createClass('js.com.cs.v2.Controls.Common.MyInputElement', js.com.cs.v2.Controls.Common.MyDOMElement, js.com.cs.v2.Controls.Common.IMyDOMElement);
js.com.cs.v2.Controls.Common.MyLabelElement.createClass('js.com.cs.v2.Controls.Common.MyLabelElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyListItemElem.createClass('js.com.cs.v2.Controls.Common.MyListItemElem', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyParagraphElement.createClass('js.com.cs.v2.Controls.Common.MyParagraphElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MySpanElement.createClass('js.com.cs.v2.Controls.Common.MySpanElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyTableCellElement.createClass('js.com.cs.v2.Controls.Common.MyTableCellElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyTableElement.createClass('js.com.cs.v2.Controls.Common.MyTableElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyTableRowElement.createClass('js.com.cs.v2.Controls.Common.MyTableRowElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Common.MyUnOrderedListElem.createClass('js.com.cs.v2.Controls.Common.MyUnOrderedListElem', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Form.MyBaseFormElement.createClass('js.com.cs.v2.Controls.Form.MyBaseFormElement', js.com.cs.v2.Controls.Common.MyDOMElement);
js.com.cs.v2.Controls.Form.MyBaseButton.createClass('js.com.cs.v2.Controls.Form.MyBaseButton', js.com.cs.v2.Controls.Form.MyBaseFormElement);
js.com.cs.v2.Controls.Form.MyButton.createClass('js.com.cs.v2.Controls.Form.MyButton', js.com.cs.v2.Controls.Form.MyBaseButton, js.com.cs.v2.Controls.Form.IMyButtonElement);
js.com.cs.v2.Controls.Form.MyCheckBox.createClass('js.com.cs.v2.Controls.Form.MyCheckBox', js.com.cs.v2.Controls.Form.MyBaseFormElement, js.com.cs.v2.Controls.Form.IMyBaseFormElement);
js.com.cs.v2.Controls.Form.MyDropDownList.createClass('js.com.cs.v2.Controls.Form.MyDropDownList', js.com.cs.v2.Controls.Form.MyBaseFormElement, js.com.cs.v2.Controls.Form.IMyBaseFormElement);
js.com.cs.v2.Controls.Form.MyFileUpload.createClass('js.com.cs.v2.Controls.Form.MyFileUpload', js.com.cs.v2.Controls.Form.MyBaseFormElement, js.com.cs.v2.Controls.Form.IMyBaseFormElement);
js.com.cs.v2.Controls.Form.MyRadioButton.createClass('js.com.cs.v2.Controls.Form.MyRadioButton', js.com.cs.v2.Controls.Form.MyBaseFormElement, js.com.cs.v2.Controls.Form.IMyBaseFormElement);
js.com.cs.v2.Controls.Form.MyTextBox.createClass('js.com.cs.v2.Controls.Form.MyTextBox', js.com.cs.v2.Controls.Form.MyBaseFormElement, js.com.cs.v2.Controls.Form.IMyBaseFormElement);
js.com.cs.v2.Controls.Form.MyTextBoxHidden.createClass('js.com.cs.v2.Controls.Form.MyTextBoxHidden', js.com.cs.v2.Controls.Form.MyTextBox);
js.com.cs.v2.Controls.Form.MyTextBoxMultiLine.createClass('js.com.cs.v2.Controls.Form.MyTextBoxMultiLine', js.com.cs.v2.Controls.Form.MyTextBox);
js.com.cs.v2.Controls.Form.MyTextBoxPassword.createClass('js.com.cs.v2.Controls.Form.MyTextBoxPassword', js.com.cs.v2.Controls.Form.MyTextBox);
js.com.cs.v2.Controls.Form.MyTextBoxSingleLine.createClass('js.com.cs.v2.Controls.Form.MyTextBoxSingleLine', js.com.cs.v2.Controls.Form.MyTextBox);
js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenu.createClass('js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenu');
js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenuListItem.createClass('js.com.cs.v2.Controls.Form.Specialized.MyDropDownListMenuListItem', js.com.cs.v2.Classes.General.ListItem);
js.com.cs.v2.Controls.Specialized.Tree.Tree.createClass('js.com.cs.v2.Controls.Specialized.Tree.Tree');
js.com.cs.v2.Controls.Specialized.Tree.TreeItem.createClass('js.com.cs.v2.Controls.Specialized.Tree.TreeItem');
js.com.cs.v2.Core.Destroyable.createClass('js.com.cs.v2.Core.Destroyable', null, js.com.cs.v2.Interfaces.IDestroyable);
js.com.cs.v2.Events.EventItem.createClass('js.com.cs.v2.Events.EventItem');
js.com.cs.v2.Events.EventsHandler.createClass('js.com.cs.v2.Events.EventsHandler');
js.com.cs.v2.Events.GenericEventItem.createClass('js.com.cs.v2.Events.GenericEventItem');
js.com.cs.v2.Events.GenericEventsHandler.createClass('js.com.cs.v2.Events.GenericEventsHandler');
js.com.cs.v2.Time.Interval.createClass('js.com.cs.v2.Time.Interval', js.com.cs.v2.Core.Destroyable);
js.com.cs.v2.UI.Accordion.Accordion.createClass('js.com.cs.v2.UI.Accordion.Accordion');
js.com.cs.v2.UI.Accordion.AccordionDetails.createClass('js.com.cs.v2.UI.Accordion.AccordionDetails');
js.com.cs.v2.UI.AJAXLoader.createClass('js.com.cs.v2.UI.AJAXLoader', js.com.cs.v2.Controls.Common.MyTableElement);
js.com.cs.v2.UI.CtrlPositioner.createClass('js.com.cs.v2.UI.CtrlPositioner');
js.com.cs.v2.UI.Image.createClass('js.com.cs.v2.UI.Image');
js.com.cs.v2.UI.ExpandableTree.ExpandableTree.createClass('js.com.cs.v2.UI.ExpandableTree.ExpandableTree');
js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel.createClass('js.com.cs.v2.UI.ExpandableTree.ExpandableTreeLevel');
js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings.createClass('js.com.cs.v2.UI.ExpandableTree.ExpandableTreeSettings');
js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer.createClass('js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer');
js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.createClass('js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject');
js.com.cs.v2.UI.Forms.Button.createClass('js.com.cs.v2.UI.Forms.Button', js.com.cs.v2.Core.Destroyable);
js.com.cs.v2.UI.Forms.CheckBoxListRequired.createClass('js.com.cs.v2.UI.Forms.CheckBoxListRequired');
js.com.cs.v2.UI.Forms.DefaultCSSClasses.createClass('js.com.cs.v2.UI.Forms.DefaultCSSClasses');
js.com.cs.v2.UI.Forms.Field.createClass('js.com.cs.v2.UI.Forms.Field');
js.com.cs.v2.UI.Forms.FieldCSSHandler.createClass('js.com.cs.v2.UI.Forms.FieldCSSHandler');
js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS.createClass('js.com.cs.v2.UI.Forms.FIELDGROUP_PARAMETERS');
js.com.cs.v2.UI.Forms.FieldGroup.createClass('js.com.cs.v2.UI.Forms.FieldGroup');
js.com.cs.v2.UI.Forms.FieldInputConstraint.createClass('js.com.cs.v2.UI.Forms.FieldInputConstraint');
js.com.cs.v2.UI.Forms.FieldValidator.createClass('js.com.cs.v2.UI.Forms.FieldValidator');
js.com.cs.v2.UI.Forms.Form.createClass('js.com.cs.v2.UI.Forms.Form');
js.com.cs.v2.UI.Forms.FormError.createClass('js.com.cs.v2.UI.Forms.FormError');
js.com.cs.v2.UI.Forms.FormsCollection.createClass('js.com.cs.v2.UI.Forms.FormsCollection');
js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox.createClass('js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuComboBox');
js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel.createClass('js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuLevel');
js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass.createClass('js.com.cs.v2.UI.Forms.LinkedMenu.LinkedMenuClass');
js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon.createClass('js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon');
js.com.cs.v2.UI.IBar.InformationBar.createClass('js.com.cs.v2.UI.IBar.InformationBar', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.IBar.InformationBarProperties.createClass('js.com.cs.v2.UI.IBar.InformationBarProperties');
js.com.cs.v2.UI.Images.HelperClasses._ChangeCaption_OnEndClass.createClass('js.com.cs.v2.UI.Images.HelperClasses._ChangeCaption_OnEndClass');
js.com.cs.v2.UI.Images.HelperClasses._ChangeImage_OnEndClass.createClass('js.com.cs.v2.UI.Images.HelperClasses._ChangeImage_OnEndClass');
js.com.cs.v2.UI.Images.HelperClasses.OnImageLoadedHandlerClass.createClass('js.com.cs.v2.UI.Images.HelperClasses.OnImageLoadedHandlerClass');
js.com.cs.v2.UI.Images.HelperClasses.OnReadyChangingImageClass.createClass('js.com.cs.v2.UI.Images.HelperClasses.OnReadyChangingImageClass');
js.com.cs.v2.UI.Images.ImagesGeneralUtil.createClass('js.com.cs.v2.UI.Images.ImagesGeneralUtil');
js.com.cs.v2.UI.Images.MediaGallery.createClass('js.com.cs.v2.UI.Images.MediaGallery');
js.com.cs.v2.UI.Images.GalleryThumbnail.createClass('js.com.cs.v2.UI.Images.GalleryThumbnail');
js.com.cs.v2.UI.Images.SlideShow.createClass('js.com.cs.v2.UI.Images.SlideShow');
js.com.cs.v2.UI.Images.ImagesPreloader.createClass('js.com.cs.v2.UI.Images.ImagesPreloader');
js.com.cs.v2.UI.Images.Images.createClass('js.com.cs.v2.UI.Images.Images');
js.com.cs.v2.UI.Images.MediaItem.createClass('js.com.cs.v2.UI.Images.MediaItem');
js.com.cs.v2.UI.Images.v1.ImageSlideshow.createClass('js.com.cs.v2.UI.Images.v1.ImageSlideshow');
js.com.cs.v2.UI.Images.v1.ImageSlideshowData.createClass('js.com.cs.v2.UI.Images.v1.ImageSlideshowData');
js.com.cs.v2.UI.JQuery.JQueryDialog.createClass('js.com.cs.v2.UI.JQuery.JQueryDialog');
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociablePopupSettings.createClass('js.com.cs.v2.UI.JQuery.prettySociable._PrettySociablePopupSettings');
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableTooltipOffset.createClass('js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableTooltipOffset');
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableIconSize.createClass('js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableIconSize');
js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable.createClass('js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable');
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings.createClass('js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableSettings');
js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableWebsiteSettings.createClass('js.com.cs.v2.UI.JQuery.prettySociable._PrettySociableWebsiteSettings');
js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest.createClass('js.com.cs.v2.UI.KeywordSuggest.KeywordSuggest');
js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult.createClass('js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResult', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults.createClass('js.com.cs.v2.UI.KeywordSuggest.KeywordSuggestResults', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.KeywordSuggest._KeywordSuggestResponse.createClass('js.com.cs.v2.UI.KeywordSuggest._KeywordSuggestResponse');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionData');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryUpload.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryUpload', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropContent', js.com.cs.v2.Controls.Common.MyDivElement, js.com.cs.v2.Interfaces.IDestroyable);
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropController');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemCropData');
js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGallerySettings');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabFunctionality');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTab', js.com.cs.v2.Controls.Common.MyAnchorElement);
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabsFunctionality');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryTabs', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemData');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality');
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryFunctionality');
js.com.cs.v2.UI.MediaGallery.v1.MediaGallery.createClass('js.com.cs.v2.UI.MediaGallery.v1.MediaGallery', js.com.cs.v2.Controls.Common.MyDivElement);
js.com.cs.v2.UI.Mouse.MouseAttach.createClass('js.com.cs.v2.UI.Mouse.MouseAttach');
js.com.cs.v2.UI.NavigationMenu.NavigationMenu.createClass('js.com.cs.v2.UI.NavigationMenu.NavigationMenu');
js.com.cs.v2.UI.NavigationMenu.NavigationMenuSettings.createClass('js.com.cs.v2.UI.NavigationMenu.NavigationMenuSettings');
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton', js.com.cs.v2.Controls.Common.MyAnchorElement);
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigation.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigation');
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails');
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation');
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton', js.com.cs.v2.Controls.Common.MyAnchorElement);
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails');
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem', js.com.cs.v2.Controls.Common.MyListItemElem);
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList.createClass('js.com.cs.v2.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList', js.com.cs.v2.Controls.Common.MyUnOrderedListElem);
js.com.cs.v2.UI.PopUpMenu.MenuItem.createClass('js.com.cs.v2.UI.PopUpMenu.MenuItem');
js.com.cs.v2.UI.PopUpMenu.MenuLevel.createClass('js.com.cs.v2.UI.PopUpMenu.MenuLevel');
js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass.createClass('js.com.cs.v2.UI.PopUpMenu.PopUpMenuClass');
js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass.createClass('js.com.cs.v2.UI.PopUpMenu.Helpers.GetDivReturnClass');
js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS.createClass('js.com.cs.v2.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS');
js.com.cs.v2.UI.Scroller.FixVerticalPosition.createClass('js.com.cs.v2.UI.Scroller.FixVerticalPosition');
js.com.cs.v2.UI.Scroller.ItemScroller.createClass('js.com.cs.v2.UI.Scroller.ItemScroller');
js.com.cs.v2.UI.SlideShow.v1.SlideDetails.createClass('js.com.cs.v2.UI.SlideShow.v1.SlideDetails');
js.com.cs.v2.UI.SlideShow.v1.SlideShow.createClass('js.com.cs.v2.UI.SlideShow.v1.SlideShow');
js.com.cs.v2.UI.Text.TextFormater.createClass('js.com.cs.v2.UI.Text.TextFormater');
js.com.cs.v2.UI.Text.TextOneLineWidthCalculator.createClass('js.com.cs.v2.UI.Text.TextOneLineWidthCalculator');
js.com.cs.v2.UI.Ticker.FadingTicker.createClass('js.com.cs.v2.UI.Ticker.FadingTicker');
js.com.cs.v2.UI.Ticker.RotatingTicker.createClass('js.com.cs.v2.UI.Ticker.RotatingTicker');
js.com.cs.v2.UI.Uploadify.v1._uploadify.createClass('js.com.cs.v2.UI.Uploadify.v1._uploadify');
js.com.cs.v2.Util.ArrayUtil.createClass('js.com.cs.v2.Util.ArrayUtil');
js.com.cs.v2.Util.Console.createClass('js.com.cs.v2.Util.Console');
js.com.cs.v2.Util._CookieOptions.createClass('js.com.cs.v2.Util._CookieOptions');
js.com.cs.v2.Util.CookieUtil.createClass('js.com.cs.v2.Util.CookieUtil');
js.com.cs.v2.Util.AjaxUtil.createClass('js.com.cs.v2.Util.AjaxUtil');
js.com.cs.v2.Util._jQueryUploadifyInitParams.createClass('js.com.cs.v2.Util._jQueryUploadifyInitParams');
js.com.cs.v2.Util.jQueryUploadifyUtil.createClass('js.com.cs.v2.Util.jQueryUploadifyUtil');
js.com.cs.v2.Util.ResizeUtil.createClass('js.com.cs.v2.Util.ResizeUtil');
js.com.cs.v2.Util.jQueryShadowBoxUtil.createClass('js.com.cs.v2.Util.jQueryShadowBoxUtil');
js.com.cs.v2.Util.DateUtil.createClass('js.com.cs.v2.Util.DateUtil');
js.com.cs.v2.Util.DojoToJQueryWrapper.createClass('js.com.cs.v2.Util.DojoToJQueryWrapper');
js.com.cs.v2.Util.DOMUtil.createClass('js.com.cs.v2.Util.DOMUtil');
js.com.cs.v2.Util.EventUtil.createClass('js.com.cs.v2.Util.EventUtil');
js.com.cs.v2.Util.FileUtil.createClass('js.com.cs.v2.Util.FileUtil');
js.com.cs.v2.Util.FormUtil.createClass('js.com.cs.v2.Util.FormUtil');
js.com.cs.v2.Util.GeneralUtil.createClass('js.com.cs.v2.Util.GeneralUtil');
js.com.cs.v2.Util.JQueryPluginsUtil.createClass('js.com.cs.v2.Util.JQueryPluginsUtil');
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.createClass('js.com.cs.v2.Util.jQueryPrettyPhotoUtil');
js.com.cs.v2.Util.KeyboardUtil.createClass('js.com.cs.v2.Util.KeyboardUtil');
js.com.cs.v2.Util.MouseUtil.createClass('js.com.cs.v2.Util.MouseUtil');
js.com.cs.v2.Util.NumberUtil.createClass('js.com.cs.v2.Util.NumberUtil');
js.com.cs.v2.Util.PageUtil.createClass('js.com.cs.v2.Util.PageUtil');
js.com.cs.v2.Util.RandomUtil.createClass('js.com.cs.v2.Util.RandomUtil');
js.com.cs.v2.Util.StringUtil.createClass('js.com.cs.v2.Util.StringUtil');
js.com.cs.v2.Util._SwfObjectParams.createClass('js.com.cs.v2.Util._SwfObjectParams');
js.com.cs.v2.Util.SWFObjectUtil.createClass('js.com.cs.v2.Util.SWFObjectUtil');
js.com.cs.v2.Util.URLUtil.createClass('js.com.cs.v2.Util.URLUtil');
js.com.cs.v2.Util.WindowUtil.createClass('js.com.cs.v2.Util.WindowUtil');
js.com.cs.v2.Util.DojoToJQuery.XhrGetHelperClass.createClass('js.com.cs.v2.Util.DojoToJQuery.XhrGetHelperClass');
js.com.cs.v2.Classes.Forms.FileUploader.UploadProgress._Instance = null;
js.com.cs.v2.Classes.General.GeneralClass._Body = null;
js.com.cs.v2.UI.FLVPlayer.GeneralFLVPlayer.flvplayeR_COUNT = 0;
js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.jW_PLAYER_PATH = '/_common/flash/v1/jwplayer/v5/player.swf';
js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.expresS_INSTALL_PATH = '/_common/flash/v1/swfobject/2.1/expressInstall.swf';
js.com.cs.v2.UI.FLVPlayer.JWPlayer.JWPlayerObject.flasH_VERSION = '9';
js.com.cs.v2.UI.Forms.DefaultCSSClasses._Instance = null;
js.com.cs.v2.UI.Forms.DefaultCSSClasses.Instance = new js.com.cs.v2.UI.Forms.DefaultCSSClasses();
js.com.cs.v2.UI.Forms.FormsCollection._Instance = null;
js.com.cs.v2.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
js.com.cs.v2.UI.Forms.FormsCollection.FORM_SUBMIT = false;
js.com.cs.v2.UI.Forms.FormsCollection.HasFileUpload = false;
js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon._fadE_DURATION_MS = 250;
js.com.cs.v2.UI.HelpMessageIcon.HelpMessageIcon._fadE_ALPHA = 0.95;
js.com.cs.v2.UI.JQuery.prettySociable.PrettySociable._SETTINGS = null;
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS = 'cs-media-gallery-items';
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CROP_SHOWN = false;
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_REORDER_SHOWN = false;
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_DELETE_SHOWN = false;
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CAPTION_SHOWN = false;
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.csS_BTN_REORDER = 'reorder';
js.com.cs.v2.UI.MediaGallery.v1.MediaGalleryItem.a_HREF_LINK = 'cs-media-gallery-item-link';
js.com.cs.v2.UI.NavigationMenu.NavigationMenu.ulPadding = 0;
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnExpand$2 = 'nav-expanded';
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnCollapse$2 = 'nav-collapsed';
js.com.cs.v2.UI.NavigationMenu.SliderNavigation.NavigationButton._btnDim$2 = 'nav-dim';
js.com.cs.v2.Util.jQueryUploadifyUtil._iniT_PARAMS = [];
js.com.cs.v2.Util.jQueryShadowBoxUtil.___onOpen = null;
js.com.cs.v2.Util.jQueryShadowBoxUtil.___onClose = null;
js.com.cs.v2.Util.jQueryShadowBoxUtil.___onFinish = null;
js.com.cs.v2.Util.jQueryShadowBoxUtil.___onChange = null;
js.com.cs.v2.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall = null;
js.com.cs.v2.Util.jQueryShadowBoxUtil._HANDLERS_INIT = false;
js.com.cs.v2.Util.jQueryShadowBoxUtil._SHADOWBOX_INIT = false;
js.com.cs.v2.Util.jQueryShadowBoxUtil._OPEN_LINK_COUNT = 0;
js.com.cs.v2.Util.DateUtil.montH_NAMES = null;
js.com.cs.v2.Util.DateUtil.daY_NAMES = null;
js.com.cs.v2.Util.DOMUtil._DOCUMENT = null;
js.com.cs.v2.Util.DOMUtil._BODY = null;
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onChangeItem = null;
js.com.cs.v2.Util.jQueryPrettyPhotoUtil.__onClose = null;
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._TEMP_SETTINGS = null;
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_COUNT = 0;
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INIT_INLINE_CONTENT_GC = false;
js.com.cs.v2.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS = [];
js.com.cs.v2.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED = false;
js.com.cs.v2.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS = [];
js.com.cs.v2.Util.MouseUtil._INIT = false;
js.com.cs.v2.Util.MouseUtil._mouseX = 0;
js.com.cs.v2.Util.MouseUtil._mouseY = 0;
js.com.cs.v2.Util.MouseUtil._mouseViewportX = 0;
js.com.cs.v2.Util.MouseUtil._mouseViewportY = 0;
js.com.cs.v2.Util.WindowUtil._scrollbaR_DEFAULT_SIZE = 17;
js.com.cs.v2.Util.WindowUtil._sNewWindowLocation = null;
js.com.cs.v2.Util.WindowUtil._WINDOW = null;
js.com.cs.v2.Util.WindowUtil._SCROLLBAR_WIDTH = -1;
js.com.cs.v2.Util.WindowUtil._EVENTS_HANDLER = new js.com.cs.v2.Events.GenericEventsHandler();

// ---- Do not remove this footer ----
// This script was generated using Script# v0.5.5.0 (http://projects.nikhilk.net/ScriptSharp)
// -----------------------------------

