// JavascriptComV2_JQuery.js
//


Type.registerNamespace('js.com.cs.v4.Classes.Animation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Animation.CustomTween

js.com.cs.v4.Classes.Animation.CustomTween = function js_com_cs_v4_Classes_Animation_CustomTween(startValue) {
    /// <param name="startValue" type="Number">
    /// </param>
    /// <field name="__onChangeValue$1" type="js.com.cs.v4.Classes.Animation.ChangeValueHandler">
    /// </field>
    /// <field name="__onComplete$1" type="js.com.cs.v4.Classes.Animation.CompleteHandler">
    /// </field>
    /// <field name="_jTemp$1" type="jQuery">
    /// </field>
    /// <field name="_startValue$1" type="Number">
    /// </field>
    /// <field name="_currValue$1" type="Number">
    /// </field>
    /// <field name="_endValue$1" type="Number">
    /// </field>
    /// <field name="_animatE_PROPERTY$1" type="String" static="true">
    /// </field>
    js.com.cs.v4.Classes.Animation.CustomTween.initializeBase(this);
    this._startValue$1 = startValue;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init$1));
}
js.com.cs.v4.Classes.Animation.CustomTween.prototype = {
    
    add_onChangeValue: function js_com_cs_v4_Classes_Animation_CustomTween$add_onChangeValue(value) {
        /// <summary>
        /// If you return false, it will stop execution of tween
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangeValue$1 = ss.Delegate.combine(this.__onChangeValue$1, value);
    },
    remove_onChangeValue: function js_com_cs_v4_Classes_Animation_CustomTween$remove_onChangeValue(value) {
        /// <summary>
        /// If you return false, it will stop execution of tween
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangeValue$1 = ss.Delegate.remove(this.__onChangeValue$1, value);
    },
    
    __onChangeValue$1: null,
    
    add_onComplete: function js_com_cs_v4_Classes_Animation_CustomTween$add_onComplete(value) {
        /// <param name="value" type="Function" />
        this.__onComplete$1 = ss.Delegate.combine(this.__onComplete$1, value);
    },
    remove_onComplete: function js_com_cs_v4_Classes_Animation_CustomTween$remove_onComplete(value) {
        /// <param name="value" type="Function" />
        this.__onComplete$1 = ss.Delegate.remove(this.__onComplete$1, value);
    },
    
    __onComplete$1: null,
    _jTemp$1: null,
    _startValue$1: 0,
    _currValue$1: 0,
    _endValue$1: 0,
    
    get_currValue: function js_com_cs_v4_Classes_Animation_CustomTween$get_currValue() {
        /// <value type="Number"></value>
        return this._currValue$1;
    },
    
    get_endValue: function js_com_cs_v4_Classes_Animation_CustomTween$get_endValue() {
        /// <value type="Number"></value>
        return this._endValue$1;
    },
    
    _attachToBodyIfIE$1: function js_com_cs_v4_Classes_Animation_CustomTween$_attachToBodyIfIE$1() {
        if (!!js.com.cs.v4.Util.GeneralUtil.isIE() && js.com.cs.v4.Util.GeneralUtil.isIE() < 8) {
            js.com.JQueryScriptSharpV2.jQueryUtil.select('body').append(this._jTemp$1);
        }
    },
    
    _init$1: function js_com_cs_v4_Classes_Animation_CustomTween$_init$1() {
        this._jTemp$1 = js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML('<span />');
        this._jTemp$1.css(js.com.cs.v4.Classes.Animation.CustomTween._animatE_PROPERTY$1, this._startValue$1);
    },
    
    _onStep$1: function js_com_cs_v4_Classes_Animation_CustomTween$_onStep$1(now, fx) {
        /// <param name="now" type="Number">
        /// </param>
        /// <param name="fx" type="js.com.JQueryScriptSharpV2._jQueryFX">
        /// </param>
        this._currValue$1 = now;
        if (this.__onChangeValue$1 != null) {
            var doNotStop = this.__onChangeValue$1(now);
            if (!doNotStop) {
                this._jTemp$1.stop(true);
            }
        }
    },
    
    _onComplete$1: function js_com_cs_v4_Classes_Animation_CustomTween$_onComplete$1() {
        this._currValue$1 = this.get_endValue();
        if (this.__onComplete$1 != null) {
            this.__onComplete$1(this.get_endValue());
        }
        this._jTemp$1.detach();
    },
    
    animateTo: function js_com_cs_v4_Classes_Animation_CustomTween$animateTo(newValue, durationSec, easing) {
        /// <param name="newValue" type="Number">
        /// </param>
        /// <param name="durationSec" type="Number">
        /// </param>
        /// <param name="easing" type="js.com.JQueryScriptSharpV2.JQUERY_EASING">
        /// </param>
        this._attachToBodyIfIE$1();
        this._endValue$1 = newValue;
        this._jTemp$1.stop(true);
        var animParams = {};
        animParams[js.com.cs.v4.Classes.Animation.CustomTween._animatE_PROPERTY$1] = newValue;
        var extraParams = {};
        extraParams.duration = parseInt(durationSec) * 1000;
        extraParams.step = ss.Delegate.create(this, this._onStep$1);
        extraParams.complete = ss.Delegate.create(this, this._onComplete$1);
        if (!ss.isNullOrUndefined(easing)) {
            extraParams.easing = js.com.JQueryScriptSharpV2.JQueryEnums.easingToString(easing);
        }
        this._jTemp$1.animate(animParams, extraParams);
    },
    
    destroy: function js_com_cs_v4_Classes_Animation_CustomTween$destroy() {
        if (this._jTemp$1 != null) {
            this._jTemp$1.stop(true);
            this._jTemp$1.remove();
            this._jTemp$1 = null;
        }
        js.com.cs.v4.Classes.Animation.CustomTween.callBaseMethod(this, 'destroy');
    },
    
    stop: function js_com_cs_v4_Classes_Animation_CustomTween$stop() {
        this._jTemp$1.stop(true);
    }
}


Type.registerNamespace('js.com.cs.v4.Classes.Forms.FileUploader');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress

js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress = function js_com_cs_v4_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.v4.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="functionToCallOnStart" type="Action">
    /// This is the ID of the textbox that will contain the upload ID GUID
    /// </field>
    /// <field name="_progressBar" type="Object">
    /// </field>
    /// <field name="__updateProgress" type="js.com.cs.v4.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.v4.Classes.Forms.FileUploader.UploadProgress.get_instance = function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$get_instance() {
    /// <value type="js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress"></value>
    if (js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress._Instance == null) {
        js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress._Instance = new js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress(null, null, null);
    }
    return js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress._Instance;
}
js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.prototype = {
    showProgressBar: false,
    started: false,
    _RequireFilledFileUploads: false,
    
    get_requireFilledFileUploads: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$get_requireFilledFileUploads() {
        /// <value type="Boolean"></value>
        return this._RequireFilledFileUploads;
    },
    set_requireFilledFileUploads: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$set_requireFilledFileUploads(value) {
        /// <value type="Boolean"></value>
        this._RequireFilledFileUploads = value;
        return value;
    },
    
    _CheckFileUploadsInAllDocument: false,
    
    get_checkFileUploadsInAllDocument: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$get_checkFileUploadsInAllDocument() {
        /// <value type="Boolean"></value>
        return this._CheckFileUploadsInAllDocument;
    },
    set_checkFileUploadsInAllDocument: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$set_checkFileUploadsInAllDocument(value) {
        /// <value type="Boolean"></value>
        this._CheckFileUploadsInAllDocument = value;
        return value;
    },
    
    checkProgressInterval: 1000,
    _variableName: 'js.com.cs.v4.Classes.Forms.FileUploader.get_instance()',
    _baseURL: '/uploadProgress.ashx',
    _queryStringParameter: 'uploadID',
    functionToCallOnStart: null,
    _progressBar: null,
    
    checkRequirements: function js_com_cs_v4_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.JQueryScriptSharpV2.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.v4.Controls.Form.MyFileUpload(elem);
                var ok = false;
                if (!this.get_checkFileUploadsInAllDocument()) {
                    var field = fileUpload.getFieldFromFormsCollection();
                    if (!ss.isNullOrUndefined(field)) {
                        var valGroup = field.get_validationParams().validationGroup;
                        ok = (valGroup === js.com.cs.v4.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_v4_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.v4.UI.Forms.Form">
        /// </param>
        return;
    },
    
    _init: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$_init() {
    },
    
    add_updateProgress: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$add_updateProgress(value) {
        /// <param name="value" type="Function" />
        this.__updateProgress = ss.Delegate.combine(this.__updateProgress, value);
    },
    remove_updateProgress: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$remove_updateProgress(value) {
        /// <param name="value" type="Function" />
        this.__updateProgress = ss.Delegate.remove(this.__updateProgress, value);
    },
    
    __updateProgress: null,
    
    _getUploadProgressURL: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$_getUploadProgressURL() {
        /// <returns type="String"></returns>
        return '#';
    },
    
    _uploadProgress_GetStatus: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus() {
    },
    
    _uploadProgress_GetStatus_OnError: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus_OnError(obj, str) {
        /// <param name="obj" type="Object">
        /// </param>
        /// <param name="str" type="String">
        /// </param>
        window.setTimeout(ss.Delegate.create(this, this._uploadProgress_GetStatus), this.checkProgressInterval);
    },
    
    _uploadProgress_GetStatus_OnLoad: function js_com_cs_v4_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(progress, byteFrom, byteTotal, filename);
            }
        }
        if (progress < 100) {
            window.setTimeout(ss.Delegate.create(this, this._uploadProgress_GetStatus), this.checkProgressInterval);
        }
    },
    
    start: function js_com_cs_v4_Classes_Forms_FileUploader_UploadProgress$start() {
        return;
        if (this.checkRequirements()) {
            this.started = true;
            this._uploadProgress_GetStatus();
            if (this.functionToCallOnStart != null) {
                this.functionToCallOnStart();
            }
        }
    }
}


Type.registerNamespace('js.com.cs.v4.Classes.Forms.linkedMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenu

js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenu = function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenu(root) {
    /// <param name="root" type="js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel">
    /// </param>
    /// <field name="_cmbs" type="js.com.cs.v4.Classes.General.Arrays.MyArray">
    /// List of [LinkedMenuComboBox]
    /// </field>
    /// <field name="_root" type="js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel">
    /// </field>
    /// <field name="cssDisabled" type="String">
    /// </field>
    this._cmbs = new js.com.cs.v4.Classes.General.Arrays.MyArray();
    this._root = root;
}
js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenu.prototype = {
    _root: null,
    cssDisabled: null,
    
    _parseCmbs: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenu$_parseCmbs(cmbs) {
        /// <param name="cmbs" type="js.com.cs.v4.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.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox(new js.com.cs.v4.Controls.Form.MyDropDownList(cmb), i, this, '', '0'));
            }
        }
    },
    
    _enableAllLevels: function js_com_cs_v4_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_v4_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_v4_Classes_Forms_linkedMenu_LinkedMenu$populateLevel(levelIndex, linkedMenuLevels) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        /// <param name="linkedMenuLevels" type="js.com.cs.v4.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_v4_Classes_Forms_linkedMenu_LinkedMenu$initMenu() {
        /// <summary>
        /// Initialises the menu
        /// </summary>
        this.populateLevel(0, this._root.children);
    },
    
    addComboBox: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenu$addComboBox(cmb, disabledText, disabledValue) {
        /// <param name="cmb" type="js.com.cs.v4.Controls.Form.MyDropDownList">
        /// </param>
        /// <param name="disabledText" type="String">
        /// </param>
        /// <param name="disabledValue" type="String">
        /// </param>
        var cmbBox = new js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox(cmb, this._cmbs.get_length(), this, disabledText, disabledValue);
        this._cmbs.push(cmbBox);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox

js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox = function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox(cmb, levelIndex, linkedMenu, disabledText, disabledValue) {
    /// <param name="cmb" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </param>
    /// <param name="levelIndex" type="Number" integer="true">
    /// </param>
    /// <param name="linkedMenu" type="js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenu">
    /// </param>
    /// <param name="disabledText" type="String">
    /// </param>
    /// <param name="disabledValue" type="String">
    /// </param>
    /// <field name="cmb" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="linkedMenu" type="js.com.cs.v4.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.v4.Classes.General.Arrays.MyArray">
    /// List of [LinkedMenuLevel]
    /// </field>
    this.linkedMenuLevels = new js.com.cs.v4.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.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox.prototype = {
    cmb: null,
    levelIndex: 0,
    linkedMenu: null,
    disabledText: null,
    disabledValue: null,
    _currentValue: null,
    _initiallyDisabled: false,
    
    _getLinkedMenuLevel: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox$_getLinkedMenuLevel(value) {
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.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_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox$_onChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.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_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox$_initHandlers() {
        this.cmb.add_onChange(ss.Delegate.create(this, this._onChange));
        this.cmb.add_onKeyUp(ss.Delegate.create(this, this._onChange));
    },
    
    _clearItems: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox$_clearItems() {
        this.cmb.clearItems();
    },
    
    _init: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox$_init() {
        this._clearItems();
        this._initHandlers();
    },
    
    enable: function js_com_cs_v4_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_v4_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_v4_Classes_Forms_linkedMenu_LinkedMenuComboBox$populate(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="js.com.cs.v4.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.v4.Classes.Forms.linkedMenu.LinkedMenuLevel

js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel = function js_com_cs_v4_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.v4.Classes.General.Arrays.MyArray">
    /// List of [LinkedMenuLevel]
    /// </field>
    this.children = new js.com.cs.v4.Classes.General.Arrays.MyArray();
    this.option = document.createElement('option');
    this.option.text = title;
    this.option.value = value;
    this.selected = selected;
}
js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel.prototype = {
    option: null,
    selected: false,
    
    addSubLevel: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenuLevel$addSubLevel(linkedMenuLevel) {
        /// <param name="linkedMenuLevel" type="js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel">
        /// </param>
        this.children.push(linkedMenuLevel);
    },
    
    addSubLevels: function js_com_cs_v4_Classes_Forms_linkedMenu_LinkedMenuLevel$addSubLevels(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="js.com.cs.v4.Classes.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < linkedMenuLevels.get_length(); i++) {
            this.addSubLevel(linkedMenuLevels.get_item(i));
        }
    }
}


Type.registerNamespace('js.com.cs.v4.Classes.Forms.Validation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE

js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE = function() { 
    /// <field name="none" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="focus" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="button" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="both" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.prototype = {
    none: 0, 
    focus: 100, 
    button: 200, 
    both: 300
}
js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.registerEnum('js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE

js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE = function() { 
    /// <field name="none" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="sameValues" type="Number" integer="true" static="true">
    /// All the fields with the same field group ID must have same values
    /// </field>
    /// <field name="atLeastOneRequired" type="Number" integer="true" static="true">
    /// All the fields within the same field group must have at least one required
    /// </field>
};
js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE.prototype = {
    none: 0, 
    sameValues: 100, 
    atLeastOneRequired: 200
}
js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE.registerEnum('js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.CharsLimit

js.com.cs.v4.Classes.Forms.Validation.CharsLimit = function js_com_cs_v4_Classes_Forms_Validation_CharsLimit(txt, amtLimit, elemDisplayRemaining) {
    /// <param name="txt" type="js.com.cs.v4.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <field name="_elemDisplayText$1" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    js.com.cs.v4.Classes.Forms.Validation.CharsLimit.initializeBase(this, [ txt, amtLimit, elemDisplayRemaining, false ]);
}
js.com.cs.v4.Classes.Forms.Validation.CharsLimit.prototype = {
    _elemDisplayText$1: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams

js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams = function js_com_cs_v4_Classes_Forms_Validation_FormFieldValidationSubGroupParams() {
    /// <field name="groupType" type="js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE">
    /// </field>
    /// <field name="groupID" type="String">
    /// </field>
}
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams.prototype = {
    groupType: 0,
    groupID: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase

js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase = function js_com_cs_v4_Classes_Forms_Validation_FormFieldValidationParamsBase() {
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="hasValidation" type="Boolean">
    /// </field>
    /// <field name="doNotValidateOnBlur" type="Boolean">
    /// </field>
    /// <field name="validateEvenIfNotVisible" type="Boolean">
    /// </field>
    /// <field name="customValidationAjaxHandlerURL" type="String">
    /// </field>
    /// <field name="cacheCustomValidationResults" type="Boolean">
    /// </field>
    /// <field name="customValidationOmitValues" type="Array" elementType="String">
    /// </field>
    /// <field name="customValidationValueCaseSensitive" type="Boolean">
    /// </field>
    /// <field name="showErrorHelpMessage" type="Boolean">
    /// </field>
    /// <field name="errMsgShowDurationBeforeHideMS" type="Number" integer="true">
    /// </field>
    /// <field name="errMsgTooltipParams" type="js.com.cs.v4.UI.Tooltip.ControlTooltipParams">
    /// </field>
    /// <field name="cssClassErrorTooltipContent" type="String">
    /// </field>
    this.customValidationOmitValues = [];
    this.errMsgTooltipParams = new js.com.cs.v4.UI.Tooltip.ControlTooltipParams();
}
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase.prototype = {
    validationGroup: null,
    hasValidation: true,
    doNotValidateOnBlur: false,
    validateEvenIfNotVisible: false,
    customValidationAjaxHandlerURL: null,
    cacheCustomValidationResults: true,
    customValidationValueCaseSensitive: false,
    showErrorHelpMessage: true,
    errMsgShowDurationBeforeHideMS: 3000,
    cssClassErrorTooltipContent: 'tooltip-error-content'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams

js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams = function js_com_cs_v4_Classes_Forms_Validation_FormFieldValidationParams() {
    /// <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="jQueryUICalendarShowType" type="js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE">
    /// </field>
    /// <field name="jQueryUICalendarShowButtonPanel" type="Boolean">
    /// </field>
    /// <field name="jQueryUICalendarCustomContainerCSSClass" type="String">
    /// </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="showJQueryMultiSelect" type="Boolean">
    /// </field>
    /// <field name="jQueryMultiSelectParams" type="js.com.JQueryScriptSharpV2._jQueryMultiSelectParams">
    /// </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="subGroupParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams">
    /// </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.v4.Classes.General.Arrays.MyArray">
    /// </field>
    /// <field name="valueNotIn" type="js.com.cs.v4.Classes.General.Arrays.MyArray">
    /// </field>
    /// <field name="valueRangeCaseSensitive" type="Boolean">
    /// </field>
    /// <field name="regExpPattern" type="RegExp">
    /// </field>
    /// <field name="showValidationIcon" type="Boolean">
    /// </field>
    this.valueIn = new js.com.cs.v4.Classes.General.Arrays.MyArray();
    this.valueNotIn = new js.com.cs.v4.Classes.General.Arrays.MyArray();
    js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams.initializeBase(this);
}
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams.enumCalendarTypeToString = function js_com_cs_v4_Classes_Forms_Validation_FormFieldValidationParams$enumCalendarTypeToString(type) {
    /// <param name="type" type="js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE">
    /// </param>
    /// <returns type="String"></returns>
    switch (type) {
        case js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.none:
            return null;
        case js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.both:
            return 'both';
        case js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.focus:
            return 'focus';
        case js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.button:
            return 'button';
    }
    return null;
}
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams.prototype = {
    isRequired: false,
    isEmail: false,
    isNumber: false,
    positiveOnly: false,
    isWebsite: false,
    negativeOnly: false,
    integersOnly: false,
    numFrom: null,
    numTo: null,
    dateFrom: null,
    dateTo: null,
    jQueryUICalendarShowType: 0,
    jQueryUICalendarShowButtonPanel: false,
    jQueryUICalendarCustomContainerCSSClass: null,
    isCurrency: false,
    currencySymbol: '\ufffd',
    isCreditCardNumber: false,
    isIPAddress: false,
    isDate: false,
    showJQueryMultiSelect: false,
    jQueryMultiSelectParams: null,
    dateFormat: 'dd/MM/yyyy',
    minLength: 0,
    maxLength: 0,
    initialEmptyText: null,
    subGroupParams: null,
    fileExtensionsAllowed: null,
    maxWords: 0,
    isAlphaNumeric: false,
    valueRangeCaseSensitive: false,
    regExpPattern: null,
    showValidationIcon: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.WordsLimit

js.com.cs.v4.Classes.Forms.Validation.WordsLimit = function js_com_cs_v4_Classes_Forms_Validation_WordsLimit(txt, amtLimit, elemDisplayRemaining) {
    /// <param name="txt" type="js.com.cs.v4.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <field name="_elemDisplayText$1" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    js.com.cs.v4.Classes.Forms.Validation.WordsLimit.initializeBase(this, [ txt, amtLimit, elemDisplayRemaining, true ]);
}
js.com.cs.v4.Classes.Forms.Validation.WordsLimit.prototype = {
    _elemDisplayText$1: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit

js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit = function js_com_cs_v4_Classes_Forms_Validation_WordsOrCharsLimit(txt, amtLimit, elemDisplayRemaining, words) {
    /// <param name="txt" type="js.com.cs.v4.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <param name="words" type="Boolean">
    /// </param>
    /// <field name="_txt" type="js.com.cs.v4.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.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="__onChange" type="js.com.cs.v4.Classes.Forms.Validation.AmtRemainingOnChangeHandler">
    /// </field>
    if (!(Type.canCast(txt, js.com.cs.v4.Controls.Form.MyTextBox))) {
        txt = js.com.cs.v4.Controls.Form.MyTextBox.getTextBoxFromElement(txt);
    }
    this._txt = txt;
    this._amtLimit = amtLimit;
    if (Type.canCast(elemDisplayRemaining, js.com.cs.v4.Controls.Common.MyElement)) {
        this._elemDisplayText = elemDisplayRemaining;
    }
    else {
        this._elemDisplayText = new js.com.cs.v4.Controls.Common.MyElement(elemDisplayRemaining);
    }
    if (ss.isNullOrUndefined(words)) {
        words = true;
    }
    this._words = words;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit.prototype = {
    _txt: null,
    _amtLimit: 0,
    _words: false,
    _elemDisplayText: null,
    
    _update: function js_com_cs_v4_Classes_Forms_Validation_WordsOrCharsLimit$_update(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._words) {
            var words = js.com.cs.v4.Util.StringUtil.getWords(this._txt.get_text());
            var amtWords = words.length;
            var wordsRemaining = this._amtLimit - amtWords;
            if (wordsRemaining < 0) {
                var wordIndex = js.com.cs.v4.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 (!ss.isNullOrUndefined(this._elemDisplayText)) {
                this._elemDisplayText.set_innerHTML(str);
            }
            if (this.__onChange != null) {
                this.__onChange(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 (!ss.isNullOrUndefined(this._elemDisplayText)) {
                this._elemDisplayText.set_innerHTML(str);
            }
            if (this.__onChange != null) {
                this.__onChange(charsRemaining);
            }
        }
    },
    
    _init: function js_com_cs_v4_Classes_Forms_Validation_WordsOrCharsLimit$_init() {
        this._txt.add_onKeyUp(ss.Delegate.create(this, this._update));
        this._txt.add_onChange(ss.Delegate.create(this, this._update));
        this._update(null);
    },
    
    add_onChange: function js_com_cs_v4_Classes_Forms_Validation_WordsOrCharsLimit$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange = ss.Delegate.combine(this.__onChange, value);
    },
    remove_onChange: function js_com_cs_v4_Classes_Forms_Validation_WordsOrCharsLimit$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange = ss.Delegate.remove(this.__onChange, value);
    },
    
    __onChange: null
}


Type.registerNamespace('js.com.cs.v4.Classes.General.Arrays');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.General.Arrays.MyArray

js.com.cs.v4.Classes.General.Arrays.MyArray = function js_com_cs_v4_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.v4.Classes.General.Arrays.MyArray.prototype = {
    
    getBaseArray: function js_com_cs_v4_Classes_General_Arrays_MyArray$getBaseArray() {
        /// <returns type="Array"></returns>
        return this._array;
    },
    
    _array: null,
    
    push: function js_com_cs_v4_Classes_General_Arrays_MyArray$push(obj) {
        /// <param name="obj" type="Object">
        /// </param>
        this._array.push(obj);
    },
    
    pop: function js_com_cs_v4_Classes_General_Arrays_MyArray$pop() {
        this._array.pop();
    },
    
    _addRange: function js_com_cs_v4_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_v4_Classes_General_Arrays_MyArray$addRange(array) {
        /// <param name="array" type="js.com.cs.v4.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_v4_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_v4_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.v4.Classes.General.Arrays.MyArray"></returns>
        var arr = new js.com.cs.v4.Classes.General.Arrays.MyArray(this._slice(indexFrom, indexTo));
        return arr;
    },
    
    _spliceRemove: function js_com_cs_v4_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_v4_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_v4_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_v4_Classes_General_Arrays_MyArray$removeAt(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        this._spliceRemove(index, 1);
    },
    
    clear: function js_com_cs_v4_Classes_General_Arrays_MyArray$clear() {
        while (this.get_length() > 0) {
            this.removeAt(0);
        }
    },
    
    getItem: function js_com_cs_v4_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_v4_Classes_General_Arrays_MyArray$getLength() {
        /// <returns type="Number" integer="true"></returns>
        return this._array.length;
    },
    
    getEnumerator: function js_com_cs_v4_Classes_General_Arrays_MyArray$getEnumerator() {
        /// <returns type="ss.IEnumerator"></returns>
        return this._array.getEnumerator();
    },
    
    aggregate: function js_com_cs_v4_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_v4_Classes_General_Arrays_MyArray$clone() {
        /// <returns type="js.com.cs.v4.Classes.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v4.Classes.General.Arrays.MyArray();
        item._array = this._array.clone();
        return item;
    },
    
    concat: function js_com_cs_v4_Classes_General_Arrays_MyArray$concat(objects) {
        /// <param name="objects" type="Array" elementType="Object">
        /// </param>
        /// <returns type="js.com.cs.v4.Classes.General.Arrays.MyArray"></returns>
        var item = this.clone();
        item._array.concat(objects);
        return item;
    },
    
    contains: function js_com_cs_v4_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_v4_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_v4_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.v4.Classes.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v4.Classes.General.Arrays.MyArray();
        item._array = this._array.extract(index, count);
        return item;
    },
    
    filter: function js_com_cs_v4_Classes_General_Arrays_MyArray$filter(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="js.com.cs.v4.Classes.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v4.Classes.General.Arrays.MyArray();
        item._array = this._array.filter(itemFilterCallback);
        return item;
    },
    
    forEach: function js_com_cs_v4_Classes_General_Arrays_MyArray$forEach(itemCallback) {
        /// <param name="itemCallback" type="ArrayItemCallback">
        /// </param>
        this._array.forEach(itemCallback);
    },
    
    indexOf: function js_com_cs_v4_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_v4_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_v4_Classes_General_Arrays_MyArray$reverse() {
        this._array.reverse();
    },
    
    some: function js_com_cs_v4_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_v4_Classes_General_Arrays_MyArray$sort(compareCallback) {
        /// <param name="compareCallback" type="CompareCallback">
        /// </param>
        this._array.sort(compareCallback);
    },
    
    get_length: function js_com_cs_v4_Classes_General_Arrays_MyArray$get_length() {
        /// <value type="Number" integer="true"></value>
        return this._array.length;
    },
    get_item: function js_com_cs_v4_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_v4_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.v4.Classes.General.Arrays.MyArrayInt

js.com.cs.v4.Classes.General.Arrays.MyArrayInt = function js_com_cs_v4_Classes_General_Arrays_MyArrayInt(array) {
    /// <param name="array" type="Array">
    /// </param>
    js.com.cs.v4.Classes.General.Arrays.MyArrayInt.initializeBase(this, [ array ]);
}
js.com.cs.v4.Classes.General.Arrays.MyArrayInt.prototype = {
    
    push: function js_com_cs_v4_Classes_General_Arrays_MyArrayInt$push(obj) {
        /// <param name="obj" type="Number" integer="true">
        /// </param>
        this._array.push(obj);
    },
    
    addRange: function js_com_cs_v4_Classes_General_Arrays_MyArrayInt$addRange(array) {
        /// <param name="array" type="js.com.cs.v4.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_v4_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_v4_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_v4_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.v4.Classes.General.Arrays.MyArrayString

js.com.cs.v4.Classes.General.Arrays.MyArrayString = function js_com_cs_v4_Classes_General_Arrays_MyArrayString(array) {
    /// <param name="array" type="Array">
    /// </param>
    js.com.cs.v4.Classes.General.Arrays.MyArrayString.initializeBase(this, [ array ]);
}
js.com.cs.v4.Classes.General.Arrays.MyArrayString.prototype = {
    
    push: function js_com_cs_v4_Classes_General_Arrays_MyArrayString$push(obj) {
        /// <param name="obj" type="String">
        /// </param>
        this._array.push(obj);
    },
    
    addRange: function js_com_cs_v4_Classes_General_Arrays_MyArrayString$addRange(array) {
        /// <param name="array" type="js.com.cs.v4.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_v4_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_v4_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_v4_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.registerNamespace('js.com.cs.v4.Classes.General');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.General.GeneralClass

js.com.cs.v4.Classes.General.GeneralClass = function js_com_cs_v4_Classes_General_GeneralClass() {
    /// <field name="_Body" type="js.com.cs.v4.Controls.Common.MyElement" static="true">
    /// </field>
}
js.com.cs.v4.Classes.General.GeneralClass.getBody = function js_com_cs_v4_Classes_General_GeneralClass$getBody() {
    /// <returns type="js.com.cs.v4.Controls.Common.MyElement"></returns>
    if (js.com.cs.v4.Classes.General.GeneralClass._Body == null) {
        js.com.cs.v4.Classes.General.GeneralClass._Body = new js.com.cs.v4.Controls.Common.MyElement(document.body);
    }
    return js.com.cs.v4.Classes.General.GeneralClass._Body;
}
js.com.cs.v4.Classes.General.GeneralClass.getForms = function js_com_cs_v4_Classes_General_GeneralClass$getForms() {
    /// <returns type="Array" elementType="MyFormElement"></returns>
    var forms = document.forms;
    var a = new js.com.cs.v4.Classes.General.Arrays.MyArray();
    for (var i = 0; i < forms.length; i++) {
        a.push(new js.com.cs.v4.Controls.Common.MyFormElement(forms[i]));
    }
    return a.getBaseArray();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.General.ListItem

js.com.cs.v4.Classes.General.ListItem = function js_com_cs_v4_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.v4.Classes.General.ListItem.prototype = {
    text: null,
    value: null,
    
    getOptionElement: function js_com_cs_v4_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;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.General.General

js.com.cs.v4.Classes.General.General = function js_com_cs_v4_Classes_General_General() {
}


Type.registerNamespace('js.com.cs.v4.Classes.Geom');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Geom.Point

js.com.cs.v4.Classes.Geom.Point = function js_com_cs_v4_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 (ss.isNullOrUndefined(x)) {
        x = 0;
    }
    if (ss.isNullOrUndefined(y)) {
        y = 0;
    }
    this.x = x;
    this.y = y;
}
js.com.cs.v4.Classes.Geom.Point.prototype = {
    x: 0,
    y: 0,
    
    add: function js_com_cs_v4_Classes_Geom_Point$add(pt) {
        /// <param name="pt" type="js.com.cs.v4.Classes.Geom.Point">
        /// </param>
        /// <returns type="js.com.cs.v4.Classes.Geom.Point"></returns>
        this.x += pt.x;
        this.y += pt.y;
        return this;
    }
}


Type.registerNamespace('js.com.cs.v4.Classes.Styles');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Styles.CSSStylesParser

js.com.cs.v4.Classes.Styles.CSSStylesParser = function js_com_cs_v4_Classes_Styles_CSSStylesParser(styles) {
    /// <param name="styles" type="String">
    /// </param>
    /// <field name="_styles" type="Object">
    /// </field>
    this._styles = {};
    this._parseStrings(styles);
}
js.com.cs.v4.Classes.Styles.CSSStylesParser.prototype = {
    
    _parseStrings: function js_com_cs_v4_Classes_Styles_CSSStylesParser$_parseStrings(styles) {
        /// <param name="styles" type="String">
        /// </param>
        var aStyles = styles.split(';');
        for (var i = 0; i < aStyles.length; i++) {
            var style = aStyles[i];
            style = js.com.cs.v4.Util.StringUtil.trim(style);
            var styleParts = style.split(':');
            if (styleParts.length >= 2) {
                var name = js.com.cs.v4.Util.StringUtil.trim(styleParts[0]);
                var value = js.com.cs.v4.Util.StringUtil.trim(styleParts[1]);
                this._styles[name.toLowerCase()] = value;
            }
        }
    },
    
    _init: function js_com_cs_v4_Classes_Styles_CSSStylesParser$_init() {
    },
    
    setStyle: function js_com_cs_v4_Classes_Styles_CSSStylesParser$setStyle(name, value) {
        /// <param name="name" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        this._styles[name.toLowerCase()] = value;
    },
    
    removeStyle: function js_com_cs_v4_Classes_Styles_CSSStylesParser$removeStyle(name) {
        /// <param name="name" type="String">
        /// </param>
        delete this._styles[name.toLowerCase()];
    },
    
    toString: function js_com_cs_v4_Classes_Styles_CSSStylesParser$toString() {
        /// <returns type="String"></returns>
        var s = '';
        var $dict1 = this._styles;
        for (var $key2 in $dict1) {
            var d = { key: $key2, value: $dict1[$key2] };
            if (!!s) {
                s += '; ';
            }
            s += d.key + ': ' + d.value;
        }
        return s;
    }
}


Type.registerNamespace('js.com.cs.v4.Classes.URL');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.URL.QueryString

js.com.cs.v4.Classes.URL.QueryString = function js_com_cs_v4_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.v4.Util.URLUtil.getQueryString(querystring);
    this._params = {};
    this._parseParams(querystring);
}
js.com.cs.v4.Classes.URL.QueryString.prototype = {
    _params: null,
    _querystring: null,
    
    _parseParams: function js_com_cs_v4_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_v4_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_v4_Classes_URL_QueryString$get_count() {
        /// <value type="Number" integer="true"></value>
        return Object.getKeyCount(this._params);
    },
    get_item: function js_com_cs_v4_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_v4_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.v4.Classes.URL.URLHandler

js.com.cs.v4.Classes.URL.URLHandler = function js_com_cs_v4_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.v4.Classes.URL.QueryString">
    /// </field>
    /// <field name="fromRoot" type="Boolean">
    /// </field>
    /// <field name="_scheme" type="String">
    /// </field>
    /// <field name="_domain" type="String">
    /// </field>
    /// <field name="_port" type="Number" integer="true">
    /// </field>
    /// <field name="_path" type="String">
    /// </field>
    /// <field name="_fragmentID" type="String">
    /// </field>
    /// <field name="_url" type="String">
    /// </field>
    this.set_url(url);
}
js.com.cs.v4.Classes.URL.URLHandler.prototype = {
    
    toString: function js_com_cs_v4_Classes_URL_URLHandler$toString() {
        /// <returns type="String"></returns>
        return this.getURL();
    },
    
    _paths: null,
    
    get_paths: function js_com_cs_v4_Classes_URL_URLHandler$get_paths() {
        /// <value type="Array" elementType="String"></value>
        return this._paths;
    },
    set_paths: function js_com_cs_v4_Classes_URL_URLHandler$set_paths(value) {
        /// <value type="Array" elementType="String"></value>
        this._paths = value;
        return value;
    },
    
    _queryString: null,
    fromRoot: false,
    _scheme: null,
    _domain: null,
    _port: 0,
    _path: null,
    _fragmentID: null,
    
    get_fragmentID: function js_com_cs_v4_Classes_URL_URLHandler$get_fragmentID() {
        /// <value type="String"></value>
        return this._fragmentID;
    },
    
    _parseURL: function js_com_cs_v4_Classes_URL_URLHandler$_parseURL(url) {
        /// <param name="url" type="String">
        /// </param>
        this._scheme = null;
        this._domain = null;
        this._port = -1;
        this._path = null;
        this.fromRoot = false;
        var regEx;
        var regExMatches;
        regEx = new RegExp('(.*?://)?(.*?)(:.*?)?/.*', 'gim');
        regExMatches = regEx.exec(url);
        if (regExMatches.length > 0) {
            if (!String.isNullOrEmpty(regExMatches[1])) {
                this._scheme = regExMatches[1];
            }
            if (!String.isNullOrEmpty(regExMatches[2])) {
                this._domain = regExMatches[2];
            }
            if (!String.isNullOrEmpty(regExMatches[3])) {
                this._port = parseInt(regExMatches[3].substring(1, regExMatches[3].length));
            }
        }
        if (this._scheme != null || this._domain != null || this._port !== -1) {
            var urlPrefix = '';
            if (!String.isNullOrEmpty(this._scheme)) {
                urlPrefix = this._scheme;
            }
            if (!String.isNullOrEmpty(this._domain)) {
                urlPrefix += this._domain;
            }
            if (this._port !== -1) {
                urlPrefix += ':' + this._port;
            }
            url = url.substring(urlPrefix.length, url.length);
        }
        var qsIndex = url.indexOf('?');
        var qs = null;
        if (qsIndex !== -1) {
            qs = url.substring(qsIndex + 1, url.length);
            url = url.substring(0, qsIndex);
            this.set_queryString(new js.com.cs.v4.Classes.URL.QueryString(qs));
        }
        var fragmentIndex = url.indexOf('#');
        if (fragmentIndex !== -1) {
            this._fragmentID = url.substring(fragmentIndex + 1, url.length);
            url = url.substring(0, fragmentIndex);
        }
        if (url.startsWith('/')) {
            this.fromRoot = true;
            url = url.substring(1, url.length);
            this._path = url;
            this._paths = url.split('/');
        }
    },
    
    getURL: function js_com_cs_v4_Classes_URL_URLHandler$getURL() {
        /// <returns type="String"></returns>
        var url = '';
        if (!String.isNullOrEmpty(this._scheme)) {
            url += this._scheme;
        }
        if (!String.isNullOrEmpty(this._domain)) {
            url += this._domain;
        }
        if (this._port !== -1) {
            url += ':' + this._port;
        }
        if (this.fromRoot) {
            url += '/';
        }
        url += this._path;
        var qs = this._queryString.toString();
        if (!String.isNullOrEmpty(qs)) {
            url += '?' + qs;
        }
        return url;
    },
    
    get_path: function js_com_cs_v4_Classes_URL_URLHandler$get_path() {
        /// <value type="String"></value>
        return this._path;
    },
    
    get_queryString: function js_com_cs_v4_Classes_URL_URLHandler$get_queryString() {
        /// <value type="js.com.cs.v4.Classes.URL.QueryString"></value>
        return this._queryString;
    },
    set_queryString: function js_com_cs_v4_Classes_URL_URLHandler$set_queryString(value) {
        /// <value type="js.com.cs.v4.Classes.URL.QueryString"></value>
        this._queryString = value;
        return value;
    },
    
    get_queryStringValue: function js_com_cs_v4_Classes_URL_URLHandler$get_queryStringValue() {
        /// <value type="String"></value>
        return this._queryString.toString();
    },
    set_queryStringValue: function js_com_cs_v4_Classes_URL_URLHandler$set_queryStringValue(value) {
        /// <value type="String"></value>
        this._queryString = new js.com.cs.v4.Classes.URL.QueryString(value);
        return value;
    },
    
    _url: null,
    
    get_url: function js_com_cs_v4_Classes_URL_URLHandler$get_url() {
        /// <value type="String"></value>
        return this.getURL();
    },
    set_url: function js_com_cs_v4_Classes_URL_URLHandler$set_url(value) {
        /// <value type="String"></value>
        this.set_queryStringValue(value);
        this._parseURL(value);
        return value;
    },
    
    compareTo: function js_com_cs_v4_Classes_URL_URLHandler$compareTo(url) {
        /// <param name="url" type="js.com.cs.v4.Classes.URL.URLHandler">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.toString().toLowerCase() === url.toString().toLowerCase();
    },
    get_item: function js_com_cs_v4_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_v4_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.registerNamespace('js.com.cs.v4.Classes.Validation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS

js.com.cs.v4.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.v4.Classes.Validation.VALUECHECKER_STATUS.prototype = {
    hidden: 1, 
    loading: 2, 
    yes: 4, 
    no: 8
}
js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.registerEnum('js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.Validation.ValueChecker

js.com.cs.v4.Classes.Validation.ValueChecker = function js_com_cs_v4_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.v4.Controls.Form.MyBaseFormElement">
    /// </param>
    /// <param name="txtHiddenFieldToUpdate" type="js.com.cs.v4.Controls.Form.MyTextBoxHidden">
    /// </param>
    /// <param name="url" type="String">
    /// </param>
    /// <field name="__onChangedStatus" type="js.com.cs.v4.Classes.Validation.ChangedStatusDelegate">
    /// </field>
    /// <field name="formElement" type="js.com.cs.v4.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.v4.Classes.Validation.VALUECHECKER_STATUS">
    /// The current status, as of last check
    /// </field>
    /// <field name="_url" type="js.com.cs.v4.Classes.URL.URLHandler">
    /// </field>
    /// <field name="txtHiddenFieldToUpdate" type="js.com.cs.v4.Controls.Form.MyTextBoxHidden">
    /// </field>
    /// <field name="hiddenFieldValue_Yes" type="String">
    /// </field>
    /// <field name="hiddenFieldValue_No" type="String">
    /// </field>
    this.currentStatus = js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.hidden;
    this.txtHiddenFieldToUpdate = txtHiddenFieldToUpdate;
    this._url = new js.com.cs.v4.Classes.URL.URLHandler(url);
    this.formElement = formElement;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._onLoad));
}
js.com.cs.v4.Classes.Validation.ValueChecker.prototype = {
    
    add_onChangedStatus: function js_com_cs_v4_Classes_Validation_ValueChecker$add_onChangedStatus(value) {
        /// <summary>
        /// An event triggered when the status chagnes
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangedStatus = ss.Delegate.combine(this.__onChangedStatus, value);
    },
    remove_onChangedStatus: function js_com_cs_v4_Classes_Validation_ValueChecker$remove_onChangedStatus(value) {
        /// <summary>
        /// An event triggered when the status chagnes
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onChangedStatus = ss.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_v4_Classes_Validation_ValueChecker$_onLoad() {
        this.formElement.add_onChangeEvenWithKeys(ss.Delegate.create(this, this._formElement_updated));
        this.formElement.add_onChange(ss.Delegate.create(this, this._formElement_updated));
        this._formElement_updated(null);
    },
    
    _formElement_updated: function js_com_cs_v4_Classes_Validation_ValueChecker$_formElement_updated(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._url.set_item(this.querystringValueParam, this.formElement.get_value());
        this._changedStatus(js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.loading);
        jQuery.get(this._url.toString(), null, ss.Delegate.create(this, this._checkResponse), 'json');
    },
    
    _changedStatus: function js_com_cs_v4_Classes_Validation_ValueChecker$_changedStatus(status) {
        /// <param name="status" type="js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS">
        /// </param>
        this.currentStatus = status;
        if (this.txtHiddenFieldToUpdate != null) {
            switch (status) {
                case js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.hidden:
                case js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.loading:
                case js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.no:
                    this.txtHiddenFieldToUpdate.set_text(this.hiddenFieldValue_No);
                    break;
                case js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.yes:
                    this.txtHiddenFieldToUpdate.set_text(this.hiddenFieldValue_Yes);
                    break;
            }
        }
        if (this.__onChangedStatus != null) {
            this.__onChangedStatus(this, this.currentStatus);
        }
    },
    
    _checkResponse: function js_com_cs_v4_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.v4.Classes.Validation.VALUECHECKER_STATUS.yes);
        }
        else {
            this._changedStatus(js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.no);
        }
    }
}


Type.registerNamespace('js.com.cs.v4.Classes.XHR');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS

js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS = function() { 
    /// <field name="notDefined" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="timeout" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="error" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="notModified" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="success" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="parserError" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.prototype = {
    notDefined: 0, 
    timeout: 20, 
    error: 30, 
    notModified: 40, 
    success: 50, 
    parserError: 60
}
js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.registerEnum('js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.XHR.XHRBaseRequest

js.com.cs.v4.Classes.XHR.XHRBaseRequest = function js_com_cs_v4_Classes_XHR_XHRBaseRequest() {
    /// <field name="_xhr" type="XMLHttpRequest">
    /// </field>
    js.com.cs.v4.Classes.XHR.XHRBaseRequest.initializeBase(this);
}
js.com.cs.v4.Classes.XHR.XHRBaseRequest.prototype = {
    _xhr: null,
    
    _destroyXHR$1: function js_com_cs_v4_Classes_XHR_XHRBaseRequest$_destroyXHR$1() {
        if (this._xhr != null) {
            this._xhr.abort();
            this._xhr = null;
        }
    },
    
    getStatusEnumFromText: function js_com_cs_v4_Classes_XHR_XHRBaseRequest$getStatusEnumFromText(textStatus) {
        /// <param name="textStatus" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS"></returns>
        textStatus = textStatus.toLowerCase();
        switch (textStatus) {
            case 'timeout':
                return js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.timeout;
            case 'error':
                return js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.error;
            case 'notmodified':
                return js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.notModified;
            case 'success':
                return js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.success;
            case 'parsererror':
                return js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.parserError;
        }
        return js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.notDefined;
    },
    
    abort: function js_com_cs_v4_Classes_XHR_XHRBaseRequest$abort() {
        this._destroyXHR$1();
    },
    
    destroy: function js_com_cs_v4_Classes_XHR_XHRBaseRequest$destroy() {
        this.abort();
        js.com.cs.v4.Classes.XHR.XHRBaseRequest.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.XHR.XHRGetJSONRequest

js.com.cs.v4.Classes.XHR.XHRGetJSONRequest = function js_com_cs_v4_Classes_XHR_XHRGetJSONRequest() {
    /// <field name="asyncronous" type="Boolean">
    /// </field>
    /// <field name="__onDataLoaded$2" type="js.com.cs.v4.Classes.XHR.XHRRequestResponseHandler">
    /// </field>
    js.com.cs.v4.Classes.XHR.XHRGetJSONRequest.initializeBase(this);
}
js.com.cs.v4.Classes.XHR.XHRGetJSONRequest.prototype = {
    asyncronous: true,
    
    add_onDataLoaded: function js_com_cs_v4_Classes_XHR_XHRGetJSONRequest$add_onDataLoaded(value) {
        /// <param name="value" type="Function" />
        this.__onDataLoaded$2 = ss.Delegate.combine(this.__onDataLoaded$2, value);
    },
    remove_onDataLoaded: function js_com_cs_v4_Classes_XHR_XHRGetJSONRequest$remove_onDataLoaded(value) {
        /// <param name="value" type="Function" />
        this.__onDataLoaded$2 = ss.Delegate.remove(this.__onDataLoaded$2, value);
    },
    
    __onDataLoaded$2: null,
    
    getJSON: function js_com_cs_v4_Classes_XHR_XHRGetJSONRequest$getJSON(url, parameters) {
        /// <param name="url" type="String">
        /// </param>
        /// <param name="parameters" type="Object">
        /// </param>
        this.abort();
        var opts = {};
        opts.url = url;
        opts.type = 'GET';
        opts.error = ss.Delegate.create(this, this._onDataError$2);
        opts.success = ss.Delegate.create(this, this.onDataLoaded);
        opts.dataType = 'json';
        opts.async = this.asyncronous;
        opts.data = parameters;
        this._xhr = jQuery.ajax(opts);
    },
    
    _onDataError$2: function js_com_cs_v4_Classes_XHR_XHRGetJSONRequest$_onDataError$2(xmlHttpRequest, textStatus, errorThrown) {
        /// <param name="xmlHttpRequest" type="XMLHttpRequest">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        /// <param name="errorThrown" type="Error">
        /// </param>
        if (this.__onDataLoaded$2 != null) {
            this.__onDataLoaded$2(this, null, this.getStatusEnumFromText(textStatus));
        }
    },
    
    onDataLoaded: function js_com_cs_v4_Classes_XHR_XHRGetJSONRequest$onDataLoaded(data, textStatus, xmlHttpRequest) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        /// <param name="xmlHttpRequest" type="XMLHttpRequest">
        /// </param>
        if (this.__onDataLoaded$2 != null) {
            this.__onDataLoaded$2(this, data, this.getStatusEnumFromText(textStatus));
        }
    }
}


Type.registerNamespace('js.com.cs.v4.Controls.Common');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.IMyElement

js.com.cs.v4.Controls.Common.IMyElement = function() { 
};
js.com.cs.v4.Controls.Common.IMyElement.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
}
js.com.cs.v4.Controls.Common.IMyElement.registerInterface('js.com.cs.v4.Controls.Common.IMyElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.HREF_TARGET

js.com.cs.v4.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.v4.Controls.Common.HREF_TARGET.prototype = {
    blank: 0, 
    self: 1, 
    parent: 2, 
    top: 3
}
js.com.cs.v4.Controls.Common.HREF_TARGET.registerEnum('js.com.cs.v4.Controls.Common.HREF_TARGET', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE

js.com.cs.v4.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.v4.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.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.registerEnum('js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyWindowInstanceParameters

js.com.cs.v4.Controls.Common.MyWindowInstanceParameters = function js_com_cs_v4_Controls_Common_MyWindowInstanceParameters() {
    /// <field name="url" type="String">
    /// Optional. String that specifies the URL of the document to display. If no URL is specified, a new window with about:blank is displayed.
    /// </field>
    /// <field name="targetName" type="String">
    /// Optional. String that specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.
    /// _blank The sURL is loaded into a new, unnamed window.
    /// _media In Microsoft Internet Explorer 6, the sURL is loaded in the Media Bar. Windows XP Service Pack 2 (SP2) and later. This feature is no longer supported. By default, the sURL is loaded into a new browser window or tab.
    /// _parent The sURL is loaded into the current frame's parent. If the frame has no parent, this value acts as the value _self.
    /// _search Disabled in Windows Internet Explorer 7, see Security and Compatibility in Internet Explorer 7 for details.
    /// Otherwise, the sURL is opened in the browser's search pane in Internet Explorer 5 or later.
    /// _self The current document is replaced with the specified sURL.
    /// _top sURL replaces any framesets that may be loaded. If there are no framesets defined, this value acts as the value _self.
    /// </field>
    /// <field name="channelmode" type="Boolean">
    /// </field>
    /// <field name="directories" type="Boolean">
    /// </field>
    /// <field name="fullscreen" type="Boolean">
    /// </field>
    /// <field name="height" type="String">
    /// </field>
    /// <field name="left" type="Nullable`1">
    /// </field>
    /// <field name="position" type="js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION">
    /// </field>
    /// <field name="location" type="Boolean">
    /// </field>
    /// <field name="menubar" type="Boolean">
    /// </field>
    /// <field name="resizable" type="Boolean">
    /// </field>
    /// <field name="scrollbars" type="Boolean">
    /// </field>
    /// <field name="status" type="Boolean">
    /// </field>
    /// <field name="titlebar" type="Boolean">
    /// </field>
    /// <field name="toolbar" type="Boolean">
    /// </field>
    /// <field name="top" type="Nullable`1">
    /// </field>
    /// <field name="width" type="String">
    /// </field>
    /// <field name="replace" type="Boolean">
    /// Optional. Boolean that specifies whether the sURL creates a new entry or replaces the current entry in the window's history list. This parameter only takes effect if the sURL is loaded into the same window.
    /// true sURL replaces the current document in the history list.
    /// false sURL creates a new entry in the history list.
    /// </field>
    this.position = js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION.none;
}
js.com.cs.v4.Controls.Common.MyWindowInstanceParameters.prototype = {
    url: null,
    targetName: null,
    channelmode: false,
    directories: true,
    fullscreen: false,
    height: null,
    left: null,
    location: true,
    menubar: true,
    resizable: true,
    scrollbars: true,
    status: true,
    titlebar: true,
    toolbar: true,
    top: null,
    width: null,
    replace: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyWindowInstance

js.com.cs.v4.Controls.Common.MyWindowInstance = function js_com_cs_v4_Controls_Common_MyWindowInstance(window) {
    /// <param name="window" type="WindowInstance">
    /// </param>
    /// <field name="__onBeforeUnload$1" type="js.com.cs.v4.Controls.Common.MyWindowInstanceBeforeUnloadHandler">
    /// </field>
    /// <field name="__onLoad$1" type="js.com.cs.v4.Controls.Common.MyWindowInstanceHandler">
    /// </field>
    /// <field name="__onUnLoad$1" type="js.com.cs.v4.Controls.Common.MyWindowInstanceHandler">
    /// </field>
    /// <field name="_window$1" type="WindowInstance">
    /// </field>
    /// <field name="_jWindow$1" type="jQuery">
    /// </field>
    js.com.cs.v4.Controls.Common.MyWindowInstance.initializeBase(this);
    if (ss.isNullOrUndefined(window)) {
        window = js.com.cs.v4.Util.WindowUtil.getWindow();
    }
    if (Type.canCast(window, js.com.cs.v4.Controls.Common.MyWindowInstanceParameters)) {
        this._window$1 = this._openWindow$1(window);
    }
    else {
        this._window$1 = window;
    }
    this._jWindow$1 = js.com.JQueryScriptSharpV2.jQueryUtil.selectObject(this._window$1);
    this._init$1();
}
js.com.cs.v4.Controls.Common.MyWindowInstance.prototype = {
    
    add_onBeforeUnload: function js_com_cs_v4_Controls_Common_MyWindowInstance$add_onBeforeUnload(value) {
        /// <summary>
        /// Triggered before page is unloaded.  If you return string, it will show as message with options for user to either
        /// leave page or else stay on page
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onBeforeUnload$1 = ss.Delegate.combine(this.__onBeforeUnload$1, value);
    },
    remove_onBeforeUnload: function js_com_cs_v4_Controls_Common_MyWindowInstance$remove_onBeforeUnload(value) {
        /// <summary>
        /// Triggered before page is unloaded.  If you return string, it will show as message with options for user to either
        /// leave page or else stay on page
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onBeforeUnload$1 = ss.Delegate.remove(this.__onBeforeUnload$1, value);
    },
    
    __onBeforeUnload$1: null,
    
    add_onLoad: function js_com_cs_v4_Controls_Common_MyWindowInstance$add_onLoad(value) {
        /// <param name="value" type="Function" />
        this.__onLoad$1 = ss.Delegate.combine(this.__onLoad$1, value);
    },
    remove_onLoad: function js_com_cs_v4_Controls_Common_MyWindowInstance$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        this.__onLoad$1 = ss.Delegate.remove(this.__onLoad$1, value);
    },
    
    __onLoad$1: null,
    
    add_onUnLoad: function js_com_cs_v4_Controls_Common_MyWindowInstance$add_onUnLoad(value) {
        /// <summary>
        /// Triggered after BeforeUnload is triggered
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onUnLoad$1 = ss.Delegate.combine(this.__onUnLoad$1, value);
    },
    remove_onUnLoad: function js_com_cs_v4_Controls_Common_MyWindowInstance$remove_onUnLoad(value) {
        /// <summary>
        /// Triggered after BeforeUnload is triggered
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onUnLoad$1 = ss.Delegate.remove(this.__onUnLoad$1, value);
    },
    
    __onUnLoad$1: null,
    _window$1: null,
    _jWindow$1: null,
    
    _init$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_init$1() {
        this._initHandlers$1();
    },
    
    _initHandlers$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_initHandlers$1() {
        this._jWindow$1.bind('beforeunload', ss.Delegate.create(this, this._onBeforeUnload$1));
        this._jWindow$1.bind('unload', ss.Delegate.create(this, this._onUnload$1));
        this._jWindow$1.bind('load', ss.Delegate.create(this, this._onLoad$1));
    },
    
    _onBeforeUnload$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_onBeforeUnload$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        /// <returns type="String"></returns>
        if (this.__onBeforeUnload$1 != null) {
            var msg = this.__onBeforeUnload$1(this, e);
            return msg;
        }
        return null;
    },
    
    _onUnload$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_onUnload$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onUnLoad$1 != null) {
            this.__onUnLoad$1(this, e);
        }
    },
    
    _onLoad$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_onLoad$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onLoad$1 != null) {
            this.__onLoad$1(this, e);
        }
    },
    
    _getFeaturesBoolValue$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_getFeaturesBoolValue$1(value) {
        /// <param name="value" type="Boolean">
        /// </param>
        /// <returns type="String"></returns>
        return (value) ? 'yes' : 'no';
    },
    
    _openWindow$1: function js_com_cs_v4_Controls_Common_MyWindowInstance$_openWindow$1(parameters) {
        /// <param name="parameters" type="js.com.cs.v4.Controls.Common.MyWindowInstanceParameters">
        /// </param>
        /// <returns type="WindowInstance"></returns>
        if (parameters.fullscreen) {
            parameters.width = '100%';
            parameters.height = '100%';
        }
        var nWidth = null;
        var nHeight = null;
        if (parameters.width != null) {
            if (parameters.width.indexOf('%') !== -1) {
                var perc = parseFloat(parameters.width);
                nWidth = parseInt(perc) / 100 * js.com.cs.v4.Util.WindowUtil.getScreenWidth();
            }
            else {
                nWidth = parseInt(parameters.width);
            }
        }
        if (parameters.height != null) {
            if (parameters.height.indexOf('%') !== -1) {
                var perc = parseFloat(parameters.height);
                nHeight = parseInt(perc) / 100 * js.com.cs.v4.Util.WindowUtil.getScreenHeight();
            }
            else {
                nHeight = parseInt(parameters.height);
            }
        }
        if (!parameters.fullscreen) {
            if (parameters.position !== js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION.none && ss.isValue(nWidth) && ss.isValue(nHeight)) {
                if (parameters.position === js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION.random) {
                    parameters.left = Math.floor(Math.random() * (js.com.cs.v4.Util.WindowUtil.getScreenWidth() - nWidth));
                    parameters.top = Math.floor(Math.random() * (js.com.cs.v4.Util.WindowUtil.getScreenHeight() - nHeight));
                }
                else if (parameters.position === js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION.center) {
                    parameters.left = (js.com.cs.v4.Util.WindowUtil.getScreenWidth() - nWidth) / 2;
                    parameters.top = (js.com.cs.v4.Util.WindowUtil.getScreenHeight() - nHeight) / 2;
                }
            }
        }
        var features = [];
        features[features.length] = 'channelmode=' + this._getFeaturesBoolValue$1(parameters.channelmode);
        features[features.length] = 'directories=' + this._getFeaturesBoolValue$1(parameters.directories);
        if (!ss.isNullOrUndefined(nHeight)) {
            features[features.length] = 'height=' + nHeight;
        }
        if (!ss.isNullOrUndefined(nWidth)) {
            features[features.length] = 'width=' + nWidth;
        }
        if (!ss.isNullOrUndefined(parameters.left)) {
            features[features.length] = 'left=' + parameters.left;
        }
        if (!ss.isNullOrUndefined(parameters.top)) {
            features[features.length] = 'top=' + parameters.top;
        }
        features[features.length] = 'location=' + this._getFeaturesBoolValue$1(parameters.location);
        features[features.length] = 'menubar=' + this._getFeaturesBoolValue$1(parameters.menubar);
        features[features.length] = 'scrollbars=' + this._getFeaturesBoolValue$1(parameters.scrollbars);
        features[features.length] = 'status=' + this._getFeaturesBoolValue$1(parameters.status);
        features[features.length] = 'titlebar=' + this._getFeaturesBoolValue$1(parameters.titlebar);
        features[features.length] = 'toolbar=' + this._getFeaturesBoolValue$1(parameters.toolbar);
        var sFeatures = features.join(',');
        return window.open(parameters.url, parameters.targetName, sFeatures, parameters.replace);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyAnchorElement

js.com.cs.v4.Controls.Common.MyAnchorElement = function js_com_cs_v4_Controls_Common_MyAnchorElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// </param>
    /// <field name="_target$1" type="js.com.cs.v4.Controls.Common.HREF_TARGET">
    /// </field>
    this._target$1 = js.com.cs.v4.Controls.Common.HREF_TARGET.self;
    js.com.cs.v4.Controls.Common.MyAnchorElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('a') : Element ]);
}
js.com.cs.v4.Controls.Common.MyAnchorElement.targetToString = function js_com_cs_v4_Controls_Common_MyAnchorElement$targetToString(target) {
    /// <param name="target" type="js.com.cs.v4.Controls.Common.HREF_TARGET">
    /// </param>
    /// <returns type="String"></returns>
    switch (target) {
        case js.com.cs.v4.Controls.Common.HREF_TARGET.blank:
            return '_blank';
        case js.com.cs.v4.Controls.Common.HREF_TARGET.self:
            return '_self';
        case js.com.cs.v4.Controls.Common.HREF_TARGET.parent:
            return '_parent';
        case js.com.cs.v4.Controls.Common.HREF_TARGET.top:
            return '_top';
    }
    return null;
}
js.com.cs.v4.Controls.Common.MyAnchorElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyAnchorElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyAnchorElement.callBaseMethod(this, 'get_element');
    },
    
    get_href: function js_com_cs_v4_Controls_Common_MyAnchorElement$get_href() {
        /// <value type="String"></value>
        return this.get_element().href;
    },
    set_href: function js_com_cs_v4_Controls_Common_MyAnchorElement$set_href(value) {
        /// <value type="String"></value>
        this.get_element().href = value;
        return value;
    },
    
    get_target: function js_com_cs_v4_Controls_Common_MyAnchorElement$get_target() {
        /// <value type="js.com.cs.v4.Controls.Common.HREF_TARGET"></value>
        return this._target$1;
    },
    set_target: function js_com_cs_v4_Controls_Common_MyAnchorElement$set_target(value) {
        /// <value type="js.com.cs.v4.Controls.Common.HREF_TARGET"></value>
        this.get_element().target = js.com.cs.v4.Controls.Common.MyAnchorElement.targetToString(value);
        this._target$1 = value;
        return value;
    },
    
    get_text: function js_com_cs_v4_Controls_Common_MyAnchorElement$get_text() {
        /// <value type="String"></value>
        return this.get_element().innerText;
    },
    set_text: function js_com_cs_v4_Controls_Common_MyAnchorElement$set_text(value) {
        /// <value type="String"></value>
        this.get_element().innerText = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyDivElement

js.com.cs.v4.Controls.Common.MyDivElement = function js_com_cs_v4_Controls_Common_MyDivElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MyDivElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('div') : Element ]);
}
js.com.cs.v4.Controls.Common.MyDivElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyDivElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyDivElement.callBaseMethod(this, 'get_element');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyElement

js.com.cs.v4.Controls.Common.MyElement = function js_com_cs_v4_Controls_Common_MyElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="__onDestroy" type="js.com.cs.v4.Controls.Common.MyElementHandler">
    /// </field>
    /// <field name="_destroyed" type="Boolean">
    /// </field>
    /// <field name="_mouseOver" type="Boolean">
    /// </field>
    /// <field name="_hasFocus" type="Boolean">
    /// </field>
    /// <field name="_stateHandlersInitialized" type="Boolean">
    /// </field>
    /// <field name="_rolloverClassOver" type="String">
    /// </field>
    /// <field name="_rolloverClassUp" type="String">
    /// </field>
    /// <field name="_initializedEvents" type="Object">
    /// </field>
    /// <field name="_jQueryElement" type="jQuery">
    /// </field>
    /// <field name="_eventsHandler" type="js.com.cs.v4.Events.GenericEventsHandler">
    /// </field>
    /// <field name="_dialogBox" type="js.com.cs.v4.UI.JQuery.JQueryDialog">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="___OnClick" type="js.com.cs.v4.Controls.Common.MyElementEventHandler">
    /// </field>
    /// <field name="_inBlur" type="Boolean">
    /// </field>
    /// <field name="_objData" type="Object">
    /// </field>
    this._initializedEvents = {};
    this._eventsHandler = new js.com.cs.v4.Events.GenericEventsHandler();
    var elem = Element;
    if (!ss.isNullOrUndefined(Element)) {
        if (Type.canCast(Element, jQuery) && (Element).length > 0) {
            this._jQueryElement = Element;
        }
        else if (Type.canCast(Element, String) || elem != null) {
            this._jQueryElement = js.com.JQueryScriptSharpV2.jQueryUtil.selectByIdOrElements(Element);
        }
        else {
            throw new Error('Must either be a string or DOM Element');
        }
    }
    if (this.get_element() == null) {
        throw new Error("Please specify element '" + Element + "'");
    }
}
js.com.cs.v4.Controls.Common.MyElement.getElement = function js_com_cs_v4_Controls_Common_MyElement$getElement(Element) {
    /// <param name="Element" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <returns type="js.com.cs.v4.Controls.Common.MyElement"></returns>
    var e = null;
    if (Type.canCast(Element, js.com.cs.v4.Controls.Common.MyElement)) {
        e = Element;
    }
    else {
        e = new js.com.cs.v4.Controls.Common.MyElement(Element);
    }
    return e;
}
js.com.cs.v4.Controls.Common.MyElement.prototype = {
    
    add_onDestroy: function js_com_cs_v4_Controls_Common_MyElement$add_onDestroy(value) {
        /// <param name="value" type="Function" />
        this.__onDestroy = ss.Delegate.combine(this.__onDestroy, value);
    },
    remove_onDestroy: function js_com_cs_v4_Controls_Common_MyElement$remove_onDestroy(value) {
        /// <param name="value" type="Function" />
        this.__onDestroy = ss.Delegate.remove(this.__onDestroy, value);
    },
    
    __onDestroy: null,
    _destroyed: false,
    _mouseOver: false,
    _hasFocus: false,
    _stateHandlersInitialized: false,
    _rolloverClassOver: null,
    _rolloverClassUp: null,
    
    get_opacity: function js_com_cs_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$get_hasFocus() {
        /// <value type="Boolean"></value>
        if (!this._stateHandlersInitialized) {
            throw new Error("Please initialize state handlers to use this property.  Call 'InitStateHandlers'");
        }
        return this._hasFocus;
    },
    
    get_isMouseOver: function js_com_cs_v4_Controls_Common_MyElement$get_isMouseOver() {
        /// <value type="Boolean"></value>
        if (!this._stateHandlersInitialized) {
            throw new Error("Please initialize state handlers to use this property.  Call 'InitStateHandlers'");
        }
        return this._mouseOver;
    },
    
    isVisible: function js_com_cs_v4_Controls_Common_MyElement$isVisible(checkParents) {
        /// <param name="checkParents" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        var el = this.get_element();
        if (!ss.isNullOrUndefined(checkParents) && checkParents) {
            var visible = this.isVisible();
            if (this.get_parent() != null && this.get_parent().get_element() !== js.com.cs.v4.Util.DOMUtil.get_body().get_element()) {
                visible = visible && this.get_parent().isVisible(checkParents);
            }
            return visible;
        }
        else {
            if (this.get_element().ownerDocument != null) {
                var vis = this.get_jQueryElement().css('display');
                return vis !== 'none';
            }
            else {
                return false;
            }
        }
    },
    
    get_element: function js_com_cs_v4_Controls_Common_MyElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        if (this._jQueryElement != null) {
            return this._jQueryElement.get(0);
        }
        else {
            throw new Error('jQueryElement not defined');
        }
    },
    
    _jQueryElement: null,
    
    get_jQueryElement: function js_com_cs_v4_Controls_Common_MyElement$get_jQueryElement() {
        /// <value type="jQuery"></value>
        return this._jQueryElement;
    },
    
    _dialogBox: null,
    _parent: null,
    
    initStateHandlers: function js_com_cs_v4_Controls_Common_MyElement$initStateHandlers() {
        this.removeStateHandlers();
        this._stateHandlersInitialized = true;
        this.add_onMouseEnter(ss.Delegate.create(this, this._myElement_onMouseEnter));
        this.add_onMouseLeave(ss.Delegate.create(this, this._myElement_onMouseLeave));
        this.add_onFocus(ss.Delegate.create(this, this._myElement_onFocus));
        this.add_onBlur(ss.Delegate.create(this, this._myElement_onBlur));
    },
    
    removeStateHandlers: function js_com_cs_v4_Controls_Common_MyElement$removeStateHandlers() {
        this._stateHandlersInitialized = false;
        this.remove_onMouseEnter(ss.Delegate.create(this, this._myElement_onMouseEnter));
        this.remove_onMouseLeave(ss.Delegate.create(this, this._myElement_onMouseLeave));
        this.remove_onFocus(ss.Delegate.create(this, this._myElement_onFocus));
        this.remove_onBlur(ss.Delegate.create(this, this._myElement_onBlur));
    },
    
    _myElement_onBlur: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._hasFocus = false;
    },
    
    _myElement_onFocus: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onFocus(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._hasFocus = true;
    },
    
    _myElement_onMouseLeave: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._mouseOver = false;
    },
    
    _myElement_onMouseEnter: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onMouseEnter(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._mouseOver = true;
    },
    
    appendChild: function js_com_cs_v4_Controls_Common_MyElement$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.v4.Classes.General.Arrays.MyArray();
        var e = obj;
        if (Type.canCast(obj, js.com.cs.v4.Controls.Common.MyElement)) {
            elem = (obj).get_element();
        }
        else if (e != null) {
            elem = obj;
        }
        else if (Type.canCast(obj, jQuery)) {
        }
        else {
            throw new Error("Cannot append child if it is not Element or 'MyElement'");
        }
        return this.get_jQueryElement().append(elem).get(0);
    },
    
    removeChild: function js_com_cs_v4_Controls_Common_MyElement$removeChild(elem, clearEventsAndJqueryData) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="clearEventsAndJqueryData" type="Boolean">
        /// </param>
        if (ss.isNullOrUndefined(clearEventsAndJqueryData)) {
            clearEventsAndJqueryData = false;
        }
        var oElem = elem;
        if (!(Type.canCast(elem, js.com.cs.v4.Controls.Common.MyElement))) {
            elem = new js.com.cs.v4.Controls.Common.MyElement((elem));
        }
        elem.remove(clearEventsAndJqueryData);
    },
    
    replaceChild: function js_com_cs_v4_Controls_Common_MyElement$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.v4.Controls.Common.MyElement)) {
            newChild = (newChild).get_element();
        }
        if (Type.canCast(oldChild, js.com.cs.v4.Controls.Common.MyElement)) {
            oldChild = (oldChild).get_element();
        }
        this.get_element().replaceChild(newChild, oldChild);
    },
    
    _isjQueryEventInitialized: function js_com_cs_v4_Controls_Common_MyElement$_isjQueryEventInitialized(eventType) {
        /// <param name="eventType" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
        /// </param>
        /// <returns type="Boolean"></returns>
        return Object.keyExists(this._initializedEvents, js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.toString(eventType));
    },
    
    add__OnClick: function js_com_cs_v4_Controls_Common_MyElement$add__OnClick(value) {
        /// <param name="value" type="Function" />
        this.___OnClick = ss.Delegate.combine(this.___OnClick, value);
    },
    remove__OnClick: function js_com_cs_v4_Controls_Common_MyElement$remove__OnClick(value) {
        /// <param name="value" type="Function" />
        this.___OnClick = ss.Delegate.remove(this.___OnClick, value);
    },
    
    ___OnClick: null,
    
    add_onClick: function js_com_cs_v4_Controls_Common_MyElement$add_onClick(value) {
        /// <param name="value" type="Function" />
        if (!this._isjQueryEventInitialized(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.click)) {
            this.add__onClick(ss.Delegate.create(this, this._myElement_onClick));
        }
        this.add__OnClick(value);
    },
    remove_onClick: function js_com_cs_v4_Controls_Common_MyElement$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.remove__OnClick(value);
    },
    
    _myElement_onClick: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.___OnClick != null) {
            this.___OnClick(this, e);
        }
    },
    
    add__onClick: function js_com_cs_v4_Controls_Common_MyElement$add__onClick(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.click, this, value);
    },
    remove__onClick: function js_com_cs_v4_Controls_Common_MyElement$remove__onClick(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.click, value);
    },
    
    add_onFocus: function js_com_cs_v4_Controls_Common_MyElement$add_onFocus(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.focus, this, value);
    },
    remove_onFocus: function js_com_cs_v4_Controls_Common_MyElement$remove_onFocus(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.focus, value);
    },
    
    add_onBlur: function js_com_cs_v4_Controls_Common_MyElement$add_onBlur(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.blur, this, value);
    },
    remove_onBlur: function js_com_cs_v4_Controls_Common_MyElement$remove_onBlur(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.blur, value);
    },
    
    add_onLoad: function js_com_cs_v4_Controls_Common_MyElement$add_onLoad(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.load, this, value);
    },
    remove_onLoad: function js_com_cs_v4_Controls_Common_MyElement$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.load, value);
    },
    
    add_onMouseDown: function js_com_cs_v4_Controls_Common_MyElement$add_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseDown, this, value);
    },
    remove_onMouseDown: function js_com_cs_v4_Controls_Common_MyElement$remove_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseDown, value);
    },
    
    add_onMouseLeave: function js_com_cs_v4_Controls_Common_MyElement$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.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseLeave, this, value);
    },
    remove_onMouseLeave: function js_com_cs_v4_Controls_Common_MyElement$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.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseLeave, value);
    },
    
    add_onMouseMove: function js_com_cs_v4_Controls_Common_MyElement$add_onMouseMove(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseMove, this, value);
    },
    remove_onMouseMove: function js_com_cs_v4_Controls_Common_MyElement$remove_onMouseMove(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseMove, value);
    },
    
    add_onMouseEnter: function js_com_cs_v4_Controls_Common_MyElement$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.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseEnter, this, value);
    },
    remove_onMouseEnter: function js_com_cs_v4_Controls_Common_MyElement$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.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseEnter, value);
    },
    
    add_onMouseOver: function js_com_cs_v4_Controls_Common_MyElement$add_onMouseOver(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseOver, this, value);
    },
    remove_onMouseOver: function js_com_cs_v4_Controls_Common_MyElement$remove_onMouseOver(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseOver, value);
    },
    
    add_onMouseOut: function js_com_cs_v4_Controls_Common_MyElement$add_onMouseOut(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseOut, this, value);
    },
    remove_onMouseOut: function js_com_cs_v4_Controls_Common_MyElement$remove_onMouseOut(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseOver, value);
    },
    
    add_onMouseUp: function js_com_cs_v4_Controls_Common_MyElement$add_onMouseUp(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseUp, this, value);
    },
    remove_onMouseUp: function js_com_cs_v4_Controls_Common_MyElement$remove_onMouseUp(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseUp, value);
    },
    
    add_onKeyUp: function js_com_cs_v4_Controls_Common_MyElement$add_onKeyUp(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyUp, this, value);
    },
    remove_onKeyUp: function js_com_cs_v4_Controls_Common_MyElement$remove_onKeyUp(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyUp, value);
    },
    
    add_onKeyDown: function js_com_cs_v4_Controls_Common_MyElement$add_onKeyDown(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyDown, this, value);
    },
    remove_onKeyDown: function js_com_cs_v4_Controls_Common_MyElement$remove_onKeyDown(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyDown, value);
    },
    
    add_onKeyPress: function js_com_cs_v4_Controls_Common_MyElement$add_onKeyPress(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyPress, this, value);
    },
    remove_onKeyPress: function js_com_cs_v4_Controls_Common_MyElement$remove_onKeyPress(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyPress, value);
    },
    
    add_onBeforeUnload: function js_com_cs_v4_Controls_Common_MyElement$add_onBeforeUnload(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.beforeUnload, this, value);
    },
    remove_onBeforeUnload: function js_com_cs_v4_Controls_Common_MyElement$remove_onBeforeUnload(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.beforeUnload, value);
    },
    
    add_onChange: function js_com_cs_v4_Controls_Common_MyElement$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.change, this, value);
    },
    remove_onChange: function js_com_cs_v4_Controls_Common_MyElement$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.change, value);
    },
    
    add_onDoubleClick: function js_com_cs_v4_Controls_Common_MyElement$add_onDoubleClick(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.doubleClick, this, value);
    },
    remove_onDoubleClick: function js_com_cs_v4_Controls_Common_MyElement$remove_onDoubleClick(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.doubleClick, value);
    },
    
    add_onError: function js_com_cs_v4_Controls_Common_MyElement$add_onError(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.error, this, value);
    },
    remove_onError: function js_com_cs_v4_Controls_Common_MyElement$remove_onError(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.error, value);
    },
    
    add_onReady: function js_com_cs_v4_Controls_Common_MyElement$add_onReady(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.ready, this, value);
    },
    remove_onReady: function js_com_cs_v4_Controls_Common_MyElement$remove_onReady(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.ready, value);
    },
    
    add_onResize: function js_com_cs_v4_Controls_Common_MyElement$add_onResize(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.resize, this, value);
    },
    remove_onResize: function js_com_cs_v4_Controls_Common_MyElement$remove_onResize(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.resize, value);
    },
    
    add_onScroll: function js_com_cs_v4_Controls_Common_MyElement$add_onScroll(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.scroll, this, value);
    },
    remove_onScroll: function js_com_cs_v4_Controls_Common_MyElement$remove_onScroll(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.scroll, value);
    },
    
    add_onSelect: function js_com_cs_v4_Controls_Common_MyElement$add_onSelect(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.select, this, value);
    },
    remove_onSelect: function js_com_cs_v4_Controls_Common_MyElement$remove_onSelect(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.select, value);
    },
    
    add_onSubmit: function js_com_cs_v4_Controls_Common_MyElement$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.submit, this, value);
    },
    remove_onSubmit: function js_com_cs_v4_Controls_Common_MyElement$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.submit, value);
    },
    
    add_onUnload: function js_com_cs_v4_Controls_Common_MyElement$add_onUnload(value) {
        /// <param name="value" type="Function" />
        this.bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.unload, this, value);
    },
    remove_onUnload: function js_com_cs_v4_Controls_Common_MyElement$remove_onUnload(value) {
        /// <param name="value" type="Function" />
        this.unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.unload, value);
    },
    
    bind: function js_com_cs_v4_Controls_Common_MyElement$bind(type, data, callback) {
        /// <param name="type" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
        /// </param>
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="callback" type="js.com.JQueryScriptSharpV2.EventCallback">
        /// </param>
        this.unBind(type, callback);
        var strType = js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(type);
        this._eventsHandler.addListener(strType, callback);
        this._jQueryElement.bind(strType, data, callback);
    },
    
    unBind: function js_com_cs_v4_Controls_Common_MyElement$unBind(type, callback) {
        /// <param name="type" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
        /// </param>
        /// <param name="callback" type="js.com.JQueryScriptSharpV2.EventCallback">
        /// </param>
        var strType = js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(type);
        var objDelegate = this._eventsHandler.removeListener(strType, callback, true);
        if (objDelegate != null) {
            this._jQueryElement.unbind(strType, objDelegate);
        }
    },
    
    hide: function js_com_cs_v4_Controls_Common_MyElement$hide(speedMs, callback) {
        /// <param name="speedMs" type="Number" integer="true">
        /// </param>
        /// <param name="callback" type="Action">
        /// </param>
        this._jQueryElement.hide(speedMs, callback);
    },
    
    show: function js_com_cs_v4_Controls_Common_MyElement$show(speedMs, callback) {
        /// <param name="speedMs" type="Number" integer="true">
        /// </param>
        /// <param name="callback" type="Action">
        /// </param>
        this._jQueryElement.show(speedMs, callback);
    },
    
    get_disabled: function js_com_cs_v4_Controls_Common_MyElement$get_disabled() {
        /// <value type="Boolean"></value>
        return this.get_element().disabled;
    },
    set_disabled: function js_com_cs_v4_Controls_Common_MyElement$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.get_element().disabled = value;
        return value;
    },
    
    get_enabled: function js_com_cs_v4_Controls_Common_MyElement$get_enabled() {
        /// <value type="Boolean"></value>
        return !this.get_disabled();
    },
    set_enabled: function js_com_cs_v4_Controls_Common_MyElement$set_enabled(value) {
        /// <value type="Boolean"></value>
        this.set_disabled(!value);
        return value;
    },
    
    enable: function js_com_cs_v4_Controls_Common_MyElement$enable() {
        this.set_enabled(true);
    },
    
    disable: function js_com_cs_v4_Controls_Common_MyElement$disable() {
        this.set_disabled(true);
    },
    
    get_readOnly: function js_com_cs_v4_Controls_Common_MyElement$get_readOnly() {
        /// <value type="Boolean"></value>
        return this._jQueryElement.attr('readonly');
    },
    set_readOnly: function js_com_cs_v4_Controls_Common_MyElement$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this._jQueryElement.attr('readonly', value);
        return value;
    },
    
    performClick: function js_com_cs_v4_Controls_Common_MyElement$performClick() {
        this.get_element().click();
    },
    
    get_tagName: function js_com_cs_v4_Controls_Common_MyElement$get_tagName() {
        /// <value type="String"></value>
        return this.get_element().tagName.toLowerCase();
    },
    
    get_tagType: function js_com_cs_v4_Controls_Common_MyElement$get_tagType() {
        /// <value type="String"></value>
        if (!String.compare(this.get_tagName(), 'input', true)) {
            var input = this.get_element();
            return input.type.toLowerCase();
        }
        return '';
    },
    
    get_style: function js_com_cs_v4_Controls_Common_MyElement$get_style() {
        /// <value type="Style"></value>
        return this.get_element().style;
    },
    
    setStyle: function js_com_cs_v4_Controls_Common_MyElement$setStyle(name, value) {
        /// <summary>
        /// This is used to set explicitly a style and override even the '!important' keyworrds
        /// </summary>
        /// <param name="name" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        var parser = new js.com.cs.v4.Classes.Styles.CSSStylesParser(this.get_jQueryElement().attr('style'));
        parser.setStyle(name, value);
        this.get_jQueryElement().attr('style', parser.toString());
    },
    
    get_id: function js_com_cs_v4_Controls_Common_MyElement$get_id() {
        /// <value type="String"></value>
        return this.get_element().id;
    },
    set_id: function js_com_cs_v4_Controls_Common_MyElement$set_id(value) {
        /// <value type="String"></value>
        this.get_element().id = value;
        return value;
    },
    
    get_innerHTML: function js_com_cs_v4_Controls_Common_MyElement$get_innerHTML() {
        /// <value type="String"></value>
        return this.get_element().innerHTML;
    },
    set_innerHTML: function js_com_cs_v4_Controls_Common_MyElement$set_innerHTML(value) {
        /// <value type="String"></value>
        this.get_element().innerHTML = value;
        return value;
    },
    
    get_innerText: function js_com_cs_v4_Controls_Common_MyElement$get_innerText() {
        /// <value type="String"></value>
        return this.get_element().innerText;
    },
    set_innerText: function js_com_cs_v4_Controls_Common_MyElement$set_innerText(value) {
        /// <value type="String"></value>
        this.get_element().innerText = value;
        return value;
    },
    
    setOpacity: function js_com_cs_v4_Controls_Common_MyElement$setOpacity(d) {
        /// <param name="d" type="Number">
        /// </param>
        this._jQueryElement.css('opacity', d);
    },
    
    focus: function js_com_cs_v4_Controls_Common_MyElement$focus() {
        /// <returns type="Boolean"></returns>
        try {
            this.get_element().focus();
            return true;
        }
        catch (ex) {
            return false;
        }
    },
    
    _inBlur: false,
    
    blur: function js_com_cs_v4_Controls_Common_MyElement$blur() {
        /// <returns type="Boolean"></returns>
        var b = true;
        if (!this._inBlur) {
            this._inBlur = true;
            try {
                this.get_element().blur();
            }
            catch ($e1) {
                b = false;
            }
            this._inBlur = false;
        }
        return b;
    },
    
    fadeIn: function js_com_cs_v4_Controls_Common_MyElement$fadeIn(durationMS) {
        /// <param name="durationMS" type="Number" integer="true">
        /// </param>
        /// <returns type="jQuery"></returns>
        return this._jQueryElement.fadeIn(durationMS);
    },
    
    fadeOut: function js_com_cs_v4_Controls_Common_MyElement$fadeOut(duration, onEnd) {
        /// <param name="duration" type="Number" integer="true">
        /// </param>
        /// <param name="onEnd" type="Action">
        /// If onEnd is specfied, the element display is not set to none
        /// </param>
        /// <returns type="jQuery"></returns>
        if (Type.canCast(onEnd, Boolean) && onEnd) {
            onEnd = ss.Delegate.create(this, this.destroy);
        }
        return this._jQueryElement.fadeOut(duration, null, onEnd);
    },
    
    placeChildBefore: function js_com_cs_v4_Controls_Common_MyElement$placeChildBefore(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        this._jQueryElement.before(elem);
    },
    
    placeChildAfter: function js_com_cs_v4_Controls_Common_MyElement$placeChildAfter(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        this._jQueryElement.after(elem);
    },
    
    addClass: function js_com_cs_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$get_cssClass() {
        /// <value type="String"></value>
        return this._jQueryElement.attr('class');
    },
    set_cssClass: function js_com_cs_v4_Controls_Common_MyElement$set_cssClass(value) {
        /// <value type="String"></value>
        this._jQueryElement.attr('class', value);
        return value;
    },
    
    toggleClass: function js_com_cs_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$get_form() {
        /// <summary>
        /// Returns the form element, if the item is an input element
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        var jForm = this.get_jQueryElement().closest('form');
        if (jForm.length > 0) {
            return jForm.get(0);
        }
        else {
            throw new Error('Element is not inside a form tag');
        }
    },
    
    get_title: function js_com_cs_v4_Controls_Common_MyElement$get_title() {
        /// <value type="String"></value>
        return this.get_element().title;
    },
    set_title: function js_com_cs_v4_Controls_Common_MyElement$set_title(value) {
        /// <value type="String"></value>
        this.get_element().title = value;
        return value;
    },
    
    clear: function js_com_cs_v4_Controls_Common_MyElement$clear(deleteEventsAndAllData) {
        /// <param name="deleteEventsAndAllData" type="Boolean">
        /// </param>
        if (ss.isNullOrUndefined(deleteEventsAndAllData)) {
            deleteEventsAndAllData = false;
        }
        if (deleteEventsAndAllData) {
            this.get_jQueryElement().children().remove();
        }
        else {
            this.get_jQueryElement().children().detach();
        }
    },
    
    getAttribute: function js_com_cs_v4_Controls_Common_MyElement$getAttribute(name) {
        /// <param name="name" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._jQueryElement.attr(name).toString();
    },
    
    setAttribute: function js_com_cs_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$clearAttribute(name) {
        /// <param name="name" type="String">
        /// </param>
        this._jQueryElement.attr('name', null);
    },
    
    _getBorderSize: function js_com_cs_v4_Controls_Common_MyElement$_getBorderSize(cssName) {
        /// <param name="cssName" type="String">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        var borderLeftWidth = this._jQueryElement.css(cssName);
        var borderLeft = parseInt(borderLeftWidth);
        if (isNaN(borderLeft)) {
            borderLeft = 0;
        }
        return borderLeft;
    },
    
    getBorderTopWidth: function js_com_cs_v4_Controls_Common_MyElement$getBorderTopWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderTopWidth');
    },
    
    getBorderLeftWidth: function js_com_cs_v4_Controls_Common_MyElement$getBorderLeftWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderLeftWidth');
    },
    
    getBorderRightWidth: function js_com_cs_v4_Controls_Common_MyElement$getBorderRightWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderRightWidth');
    },
    
    getBorderBottomWidth: function js_com_cs_v4_Controls_Common_MyElement$getBorderBottomWidth() {
        /// <returns type="Number" integer="true"></returns>
        return this._getBorderSize('borderBottomWidth');
    },
    
    _initHandlers: function js_com_cs_v4_Controls_Common_MyElement$_initHandlers() {
    },
    
    _init: function js_com_cs_v4_Controls_Common_MyElement$_init() {
    },
    
    _initDialogBox: function js_com_cs_v4_Controls_Common_MyElement$_initDialogBox() {
        if (this._dialogBox == null) {
            this._dialogBox = new js.com.cs.v4.UI.JQuery.JQueryDialog(this.get_jQueryElement());
        }
    },
    
    get_myElement: function js_com_cs_v4_Controls_Common_MyElement$get_myElement() {
        /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
        return this;
    },
    
    get_dialog: function js_com_cs_v4_Controls_Common_MyElement$get_dialog() {
        /// <value type="js.com.cs.v4.UI.JQuery.JQueryDialog"></value>
        this._initDialogBox();
        return this._dialogBox;
    },
    
    _setDialogDefaults: function js_com_cs_v4_Controls_Common_MyElement$_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_v4_Controls_Common_MyElement$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="Action">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.JQuery.JQueryDialog"></returns>
        this._setDialogDefaults(title, showCloseIcon);
        if (!ss.isNullOrUndefined(btnNoText) && ss.isNullOrUndefined(btnYesText)) {
            this._dialogBox.setOkButton(btnNoText);
        }
        else if (!ss.isNullOrUndefined(btnNoText) && !ss.isNullOrUndefined(btnYesText)) {
            this._dialogBox.setYesNoButtons(btnYesText, btnYesHandler, btnNoText);
        }
        else {
            this._dialogBox.setButtons({});
        }
        this._dialogBox.open();
        return this._dialogBox;
    },
    
    isInDOM: function js_com_cs_v4_Controls_Common_MyElement$isInDOM() {
        /// <returns type="Boolean"></returns>
        if (this.get_parent() == null) {
            return false;
        }
        else if (this.get_parent().get_element() === document.body) {
            return true;
        }
        else {
            return this.get_parent().isInDOM();
        }
    },
    
    get_parent: function js_com_cs_v4_Controls_Common_MyElement$get_parent() {
        /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
        if ((this._parent == null && this.get_element().parentNode != null) || (this._parent != null && this._parent.get_element() !== this.get_element().parentNode)) {
            var parentElem = this.get_element().parentNode;
            if (!!js.com.cs.v4.Util.GeneralUtil.isIE()) {
                var objParent = this.get_element().parentElement;
                if (objParent == null) {
                    parentElem = null;
                }
            }
            if (parentElem != null) {
                this._parent = new js.com.cs.v4.Controls.Common.MyElement(this.get_element().parentNode);
            }
        }
        return this._parent;
    },
    
    replaceWith: function js_com_cs_v4_Controls_Common_MyElement$replaceWith(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        if (Type.canCast(elem, js.com.cs.v4.Controls.Common.MyElement)) {
            var myDomElem = elem;
            elem = myDomElem.get_element();
        }
        this.get_jQueryElement().replaceWith(elem);
    },
    
    _getVisiblePropertyValue: function js_com_cs_v4_Controls_Common_MyElement$_getVisiblePropertyValue(type) {
        /// <param name="type" type="js.com.cs.v4.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.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.height:
                value = this.get_jQueryElement().height();
                break;
            case js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.left:
                value = this.get_jQueryElement().position().left;
                break;
            case js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeight:
                value = this.get_jQueryElement().outerHeight();
                break;
            case js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeightIncludeMargin:
                value = this.get_jQueryElement().outerHeight(true);
                break;
            case js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidth:
                value = this.get_jQueryElement().outerWidth();
                break;
            case js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidthIncludeMargin:
                value = this.get_jQueryElement().outerWidth(true);
                break;
            case js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.top:
                value = this.get_jQueryElement().position().top;
                break;
            case js.com.cs.v4.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_element() !== js.com.cs.v4.Util.DOMUtil.get_body().get_element()) {
                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_v4_Controls_Common_MyElement$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.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.width);
    },
    
    getOuterWidth: function js_com_cs_v4_Controls_Common_MyElement$getOuterWidth(includeMargins) {
        /// <param name="includeMargins" type="Boolean">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue((includeMargins) ? js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidthIncludeMargin : js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerWidth);
    },
    
    getHeight: function js_com_cs_v4_Controls_Common_MyElement$getHeight() {
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.height);
    },
    
    getOuterHeight: function js_com_cs_v4_Controls_Common_MyElement$getOuterHeight(includeMargins) {
        /// <param name="includeMargins" type="Boolean">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue((includeMargins) ? js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeightIncludeMargin : js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.outerHeight);
    },
    
    getLeft: function js_com_cs_v4_Controls_Common_MyElement$getLeft() {
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.left);
    },
    
    getTop: function js_com_cs_v4_Controls_Common_MyElement$getTop() {
        /// <returns type="Number" integer="true"></returns>
        return this._getVisiblePropertyValue(js.com.cs.v4.Controls.Common.GET_VISIBLE_ITEM_TYPE.top);
    },
    
    getVisibleHeight: function js_com_cs_v4_Controls_Common_MyElement$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_element() !== js.com.cs.v4.Util.DOMUtil.get_body().get_element()) {
                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_v4_Controls_Common_MyElement$get_objData() {
        /// <summary>
        /// To store some reference with this element
        /// </summary>
        /// <value type="Object"></value>
        return this._objData;
    },
    set_objData: function js_com_cs_v4_Controls_Common_MyElement$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_v4_Controls_Common_MyElement$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 parseInt(css);
        }
    },
    
    get_marginRight: function js_com_cs_v4_Controls_Common_MyElement$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 parseInt(css);
        }
    },
    
    slideLeft: function js_com_cs_v4_Controls_Common_MyElement$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, ss.Delegate.create(this, this.destroy));
    },
    
    remove: function js_com_cs_v4_Controls_Common_MyElement$remove(clearEventsAndJqueryData) {
        /// <param name="clearEventsAndJqueryData" type="Boolean">
        /// </param>
        if (ss.isNullOrUndefined(clearEventsAndJqueryData)) {
            clearEventsAndJqueryData = false;
        }
        if (clearEventsAndJqueryData) {
            this.get_jQueryElement().remove();
        }
        else {
            this.get_jQueryElement().detach();
        }
    },
    
    setRolloverClassesHandlers: function js_com_cs_v4_Controls_Common_MyElement$setRolloverClassesHandlers(up, over) {
        /// <param name="up" type="String">
        /// </param>
        /// <param name="over" type="String">
        /// </param>
        this.removeRolloverClassesHandlers();
        this._rolloverClassOver = over;
        this._rolloverClassUp = up;
        this.add_onMouseEnter(ss.Delegate.create(this, this._myElement_onMouseRollover));
        this.add_onMouseLeave(ss.Delegate.create(this, this._myElement_onMouseRollout));
    },
    
    removeRolloverClassesHandlers: function js_com_cs_v4_Controls_Common_MyElement$removeRolloverClassesHandlers() {
        this.remove_onMouseEnter(ss.Delegate.create(this, this._myElement_onMouseRollover));
        this.remove_onMouseLeave(ss.Delegate.create(this, this._myElement_onMouseRollout));
        this._rolloverClassOver = this._rolloverClassUp = null;
    },
    
    _myElement_onMouseRollover: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onMouseRollover(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.toggle2CssClasses(this._rolloverClassOver, this._rolloverClassUp, true);
    },
    
    _myElement_onMouseRollout: function js_com_cs_v4_Controls_Common_MyElement$_myElement_onMouseRollout(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.toggle2CssClasses(this._rolloverClassOver, this._rolloverClassUp, false);
    },
    
    get_destroyed: function js_com_cs_v4_Controls_Common_MyElement$get_destroyed() {
        /// <value type="Boolean"></value>
        return this._destroyed;
    },
    
    destroy: function js_com_cs_v4_Controls_Common_MyElement$destroy() {
        this._destroyed = true;
        this.remove(true);
        if (this.__onDestroy != null) {
            this.__onDestroy(this);
        }
    },
    
    select: function js_com_cs_v4_Controls_Common_MyElement$select(expression) {
        /// <param name="expression" type="String">
        /// </param>
        /// <returns type="jQuery"></returns>
        return js.com.JQueryScriptSharpV2.jQueryUtil.select(expression, this.get_jQueryElement());
    },
    
    toggle2CssClasses: function js_com_cs_v4_Controls_Common_MyElement$toggle2CssClasses(class1, class2, setFirst) {
        /// <param name="class1" type="String">
        /// </param>
        /// <param name="class2" type="String">
        /// </param>
        /// <param name="setFirst" type="Boolean">
        /// </param>
        this.removeClass((setFirst) ? class2 : class1);
        this.addClass((setFirst) ? class1 : class2);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyFormElement

js.com.cs.v4.Controls.Common.MyFormElement = function js_com_cs_v4_Controls_Common_MyFormElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MyFormElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('form') : Element ]);
}
js.com.cs.v4.Controls.Common.MyFormElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyFormElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyFormElement.callBaseMethod(this, 'get_element');
    },
    
    checkIfFormContainsFilledFileUploads: function js_com_cs_v4_Controls_Common_MyFormElement$checkIfFormContainsFilledFileUploads() {
        /// <returns type="Boolean"></returns>
        var list = js.com.JQueryScriptSharpV2.jQueryUtil.select("input[type='file']", this.get_element());
        for (var i = 0; i < list.length; i++) {
            var fileUpload = new js.com.cs.v4.Controls.Form.MyFileUpload(list.get(i));
            if (!String.isNullOrEmpty(fileUpload.get_value())) {
                return true;
            }
        }
        return false;
    },
    
    add_onSubmit: function js_com_cs_v4_Controls_Common_MyFormElement$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.get_element().addEventListener('onsubmit', value, false);
    },
    remove_onSubmit: function js_com_cs_v4_Controls_Common_MyFormElement$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.get_element().removeEventListener('onsubmit', value, false);
    },
    
    get_action: function js_com_cs_v4_Controls_Common_MyFormElement$get_action() {
        /// <value type="String"></value>
        return this.get_element().action;
    },
    set_action: function js_com_cs_v4_Controls_Common_MyFormElement$set_action(value) {
        /// <value type="String"></value>
        this.get_element().action = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyImageElement

js.com.cs.v4.Controls.Common.MyImageElement = function js_com_cs_v4_Controls_Common_MyImageElement(Element) {
    /// <param name="Element" 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.v4.Controls.Common.MyImageElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('img') : Element ]);
    this.add_onLoad(ss.Delegate.create(this, this._myImageElement_onLoad$1));
}
js.com.cs.v4.Controls.Common.MyImageElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyImageElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyImageElement.callBaseMethod(this, 'get_element');
    },
    
    _onLoadTriggered$1: false,
    _onLoadWidth$1: 0,
    
    get_onLoadWidth: function js_com_cs_v4_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_v4_Controls_Common_MyImageElement$get_onLoadHeight() {
        /// <value type="Number" integer="true"></value>
        return this._onLoadHeight$1;
    },
    
    _setOnLoadTriggered$1: function js_com_cs_v4_Controls_Common_MyImageElement$_setOnLoadTriggered$1() {
        this._onLoadTriggered$1 = true;
    },
    
    _uploadLoadWidth$1: function js_com_cs_v4_Controls_Common_MyImageElement$_uploadLoadWidth$1() {
        this._onLoadWidth$1 = this.get_width();
        this._onLoadHeight$1 = this.get_height();
    },
    
    _myImageElement_onLoad$1: function js_com_cs_v4_Controls_Common_MyImageElement$_myImageElement_onLoad$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        window.setTimeout(ss.Delegate.create(this, this._setOnLoadTriggered$1), 250);
        window.setTimeout(ss.Delegate.create(this, this._uploadLoadWidth$1), 1000);
    },
    
    get_src: function js_com_cs_v4_Controls_Common_MyImageElement$get_src() {
        /// <value type="String"></value>
        return this.get_element().src;
    },
    set_src: function js_com_cs_v4_Controls_Common_MyImageElement$set_src(value) {
        /// <value type="String"></value>
        this._onLoadTriggered$1 = false;
        this.get_element().src = value;
        return value;
    },
    
    get_alt: function js_com_cs_v4_Controls_Common_MyImageElement$get_alt() {
        /// <value type="String"></value>
        return this.get_element().alt;
    },
    set_alt: function js_com_cs_v4_Controls_Common_MyImageElement$set_alt(value) {
        /// <value type="String"></value>
        this.get_element().alt = value;
        return value;
    },
    
    get_title: function js_com_cs_v4_Controls_Common_MyImageElement$get_title() {
        /// <value type="String"></value>
        return this.get_element().title;
    },
    set_title: function js_com_cs_v4_Controls_Common_MyImageElement$set_title(value) {
        /// <value type="String"></value>
        this.get_element().title = value;
        return value;
    },
    
    get_complete: function js_com_cs_v4_Controls_Common_MyImageElement$get_complete() {
        /// <value type="Boolean"></value>
        return this.get_element().complete;
    },
    
    _triggerImageLoad$1: function js_com_cs_v4_Controls_Common_MyImageElement$_triggerImageLoad$1() {
        this.get_jQueryElement().triggerHandler(js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.load));
    },
    
    add_onLoad: function js_com_cs_v4_Controls_Common_MyImageElement$add_onLoad(value) {
        /// <param name="value" type="Function" />
        js.com.cs.v4.Controls.Common.MyImageElement.callBaseMethod(this, 'bind', [ js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.load, this, value ]);
        if (this.get_complete() && !this._onLoadTriggered$1) {
            window.setTimeout(ss.Delegate.create(this, this._triggerImageLoad$1), 50);
        }
    },
    remove_onLoad: function js_com_cs_v4_Controls_Common_MyImageElement$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        js.com.cs.v4.Controls.Common.MyImageElement.callBaseMethod(this, 'unBind', [ js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.load, value ]);
    },
    
    get_width: function js_com_cs_v4_Controls_Common_MyImageElement$get_width() {
        /// <value type="Number" integer="true"></value>
        return this.get_element().width;
    },
    set_width: function js_com_cs_v4_Controls_Common_MyImageElement$set_width(value) {
        /// <value type="Number" integer="true"></value>
        this.get_element().width = value;
        return value;
    },
    
    get_height: function js_com_cs_v4_Controls_Common_MyImageElement$get_height() {
        /// <value type="Number" integer="true"></value>
        return this.get_element().height;
    },
    set_height: function js_com_cs_v4_Controls_Common_MyImageElement$set_height(value) {
        /// <value type="Number" integer="true"></value>
        this.get_element().height = value;
        return value;
    },
    
    get_naturalWidth: function js_com_cs_v4_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_v4_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.v4.Controls.Common.MyInputElement

js.com.cs.v4.Controls.Common.MyInputElement = function js_com_cs_v4_Controls_Common_MyInputElement(Element, inputType) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <param name="inputType" type="String">
    /// </param>
    js.com.cs.v4.Controls.Common.MyInputElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('input') : Element ]);
    if (!ss.isNullOrUndefined(inputType)) {
        this.get_element().type = inputType;
    }
}
js.com.cs.v4.Controls.Common.MyInputElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyInputElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyInputElement.callBaseMethod(this, 'get_element');
    },
    
    get_value: function js_com_cs_v4_Controls_Common_MyInputElement$get_value() {
        /// <value type="String"></value>
        var val = this.get_jQueryElement().val();
        return (val == null) ? null : val.toString();
    },
    set_value: function js_com_cs_v4_Controls_Common_MyInputElement$set_value(value) {
        /// <value type="String"></value>
        this.get_jQueryElement().val(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyLabelElement

js.com.cs.v4.Controls.Common.MyLabelElement = function js_com_cs_v4_Controls_Common_MyLabelElement(Element) {
    /// <param name="Element" 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.v4.Controls.Common.MyLabelElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('label') : Element ]);
}
js.com.cs.v4.Controls.Common.MyLabelElement.prototype = {
    _forElement$1: null,
    
    get_forElement: function js_com_cs_v4_Controls_Common_MyLabelElement$get_forElement() {
        /// <value type="Object" domElement="true"></value>
        return this._forElement$1;
    },
    set_forElement: function js_com_cs_v4_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_v4_Controls_Common_MyLabelElement$get_forId() {
        /// <value type="String"></value>
        return this._forId$1;
    },
    set_forId: function js_com_cs_v4_Controls_Common_MyLabelElement$set_forId(value) {
        /// <value type="String"></value>
        this._forId$1 = value;
        this.setAttribute('for', value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyListItemElem

js.com.cs.v4.Controls.Common.MyListItemElem = function js_com_cs_v4_Controls_Common_MyListItemElem(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MyListItemElem.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('li') : Element ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyParagraphElement

js.com.cs.v4.Controls.Common.MyParagraphElement = function js_com_cs_v4_Controls_Common_MyParagraphElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MyParagraphElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('p') : Element ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MySpanElement

js.com.cs.v4.Controls.Common.MySpanElement = function js_com_cs_v4_Controls_Common_MySpanElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MySpanElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('span') : Element ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyTableCellElement

js.com.cs.v4.Controls.Common.MyTableCellElement = function js_com_cs_v4_Controls_Common_MyTableCellElement(Element, heading) {
    /// <param name="Element" 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.v4.Controls.Common.MyTableCellElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement((ss.isNullOrUndefined(heading) || !heading) ? 'td' : 'th') : Element ]);
}
js.com.cs.v4.Controls.Common.MyTableCellElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyTableCellElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyTableCellElement.callBaseMethod(this, 'get_element');
    },
    
    get_cellIndex: function js_com_cs_v4_Controls_Common_MyTableCellElement$get_cellIndex() {
        /// <value type="Number" integer="true"></value>
        return this.get_element().get_cellIndex();
    },
    
    get_colSpan: function js_com_cs_v4_Controls_Common_MyTableCellElement$get_colSpan() {
        /// <value type="Number" integer="true"></value>
        return this.get_element().colSpan;
    },
    set_colSpan: function js_com_cs_v4_Controls_Common_MyTableCellElement$set_colSpan(value) {
        /// <value type="Number" integer="true"></value>
        this.get_element().colSpan = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyTableElement

js.com.cs.v4.Controls.Common.MyTableElement = function js_com_cs_v4_Controls_Common_MyTableElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MyTableElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('table') : Element ]);
    this.set_cellPadding(this.set_cellSpacing(0));
}
js.com.cs.v4.Controls.Common.MyTableElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyTableElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyTableElement.callBaseMethod(this, 'get_element');
    },
    
    insertRow: function js_com_cs_v4_Controls_Common_MyTableElement$insertRow(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v4.Controls.Common.MyTableRowElement"></returns>
        var jChildRows = this.get_jQueryElement().children();
        var jRow = js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML('<tr></tr>');
        if (index < 0) {
            index = 0;
        }
        if (index > jChildRows.length) {
            index = jChildRows.length;
        }
        if (index > 0 && jChildRows.length > 0) {
            jChildRows.eq(index - 1).after(jRow);
        }
        else {
            this.get_jQueryElement().prepend(jRow);
        }
        return new js.com.cs.v4.Controls.Common.MyTableRowElement(jRow);
    },
    
    deleteRow: function js_com_cs_v4_Controls_Common_MyTableElement$deleteRow(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var jChildren = this.get_jQueryElement().children();
        if (index < 0) {
            index = 0;
        }
        if (index >= jChildren.length) {
            index = jChildren.length - 1;
        }
        jChildren.eq(index).remove();
    },
    
    appendChild: function js_com_cs_v4_Controls_Common_MyTableElement$appendChild(obj) {
        /// <param name="obj" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (Type.canCast(obj, js.com.cs.v4.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.v4.Controls.Common.MyTableElement.callBaseMethod(this, 'appendChild', [ obj ]);
    },
    
    get_cellPadding: function js_com_cs_v4_Controls_Common_MyTableElement$get_cellPadding() {
        /// <value type="Number" integer="true"></value>
        return parseInt(this.get_jQueryElement().attr('cellpadding').toString());
    },
    set_cellPadding: function js_com_cs_v4_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_v4_Controls_Common_MyTableElement$get_cellSpacing() {
        /// <value type="Number" integer="true"></value>
        return parseInt(this.get_jQueryElement().attr('cellspacing').toString());
    },
    set_cellSpacing: function js_com_cs_v4_Controls_Common_MyTableElement$set_cellSpacing(value) {
        /// <value type="Number" integer="true"></value>
        this.get_jQueryElement().attr('cellspacing', value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyTableRowElement

js.com.cs.v4.Controls.Common.MyTableRowElement = function js_com_cs_v4_Controls_Common_MyTableRowElement(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="_cells$1" type="Array" elementType="MyTableCellElement">
    /// </field>
    js.com.cs.v4.Controls.Common.MyTableRowElement.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('tr') : Element ]);
}
js.com.cs.v4.Controls.Common.MyTableRowElement.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Common_MyTableRowElement$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Common.MyTableRowElement.callBaseMethod(this, 'get_element');
    },
    
    _cells$1: null,
    
    insertCell: function js_com_cs_v4_Controls_Common_MyTableRowElement$insertCell(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v4.Controls.Common.MyTableCellElement"></returns>
        var jChildTDs = this.get_jQueryElement().children();
        if (ss.isNullOrUndefined(index)) {
            index = jChildTDs.length;
        }
        var jTD = js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML('<td></td>');
        if (index < 0) {
            index = 0;
        }
        if (index > jChildTDs.length) {
            index = jChildTDs.length;
        }
        if (index > 0 && jChildTDs.length > 0) {
            jChildTDs.eq(index - 1).after(jTD);
        }
        else {
            this.get_jQueryElement().prepend(jTD);
        }
        return new js.com.cs.v4.Controls.Common.MyTableCellElement(jTD);
    },
    
    deleteCell: function js_com_cs_v4_Controls_Common_MyTableRowElement$deleteCell(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var jChildren = this.get_jQueryElement().children();
        if (index < 0) {
            index = 0;
        }
        if (index >= jChildren.length) {
            index = jChildren.length - 1;
        }
        jChildren.eq(index).remove();
    },
    
    get_rowIndex: function js_com_cs_v4_Controls_Common_MyTableRowElement$get_rowIndex() {
        /// <value type="Number" integer="true"></value>
        return this.get_element().rowIndex;
    },
    
    appendChild: function js_com_cs_v4_Controls_Common_MyTableRowElement$appendChild(obj) {
        /// <param name="obj" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (Type.canCast(obj, js.com.cs.v4.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.v4.Controls.Common.MyTableRowElement.callBaseMethod(this, 'appendChild', [ obj ]);
    },
    
    getCells: function js_com_cs_v4_Controls_Common_MyTableRowElement$getCells(reconstructCells) {
        /// <summary>
        /// Reconstruct the array of cells from the set of current cells.  If there has been any changes to the DOM, then you need
        /// to call reconstructCells.
        /// </summary>
        /// <param name="reconstructCells" type="Boolean">
        /// If true, a new list is created and returned, if false the same list is always returned
        /// </param>
        /// <returns type="Array" elementType="MyTableCellElement"></returns>
        if (this._cells$1 == null || reconstructCells) {
            var jChildren = this.get_jQueryElement().children();
            this._cells$1 = [];
            for (var i = 0; i < jChildren.length; i++) {
                var cell = new js.com.cs.v4.Controls.Common.MyTableCellElement(jChildren.eq(i));
                this._cells$1[this._cells$1.length] = cell;
            }
        }
        return this._cells$1;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Common.MyUnOrderedListElem

js.com.cs.v4.Controls.Common.MyUnOrderedListElem = function js_com_cs_v4_Controls_Common_MyUnOrderedListElem(Element) {
    /// <param name="Element" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v4.Controls.Common.MyUnOrderedListElem.initializeBase(this, [ (ss.isNullOrUndefined(Element)) ? document.createElement('ul') : Element ]);
}


Type.registerNamespace('js.com.cs.v4.Controls.Form.Enums');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE

js.com.cs.v4.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>
    /// <field name="phoneNumber" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="date3Combo" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.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, 
    phoneNumber: 11, 
    date3Combo: 12
}
js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.registerEnum('js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE', false);


Type.registerNamespace('js.com.cs.v4.Controls.Form');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.IMyBaseFormElement

js.com.cs.v4.Controls.Form.IMyBaseFormElement = function() { 
};
js.com.cs.v4.Controls.Form.IMyBaseFormElement.prototype = {
    get_myElement : 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,
    add_onChangeEvenWithKeys : null,
    remove_onChangeEvenWithKeys : null,
    get_valueObject : null,
    set_valueObject : null
}
js.com.cs.v4.Controls.Form.IMyBaseFormElement.registerInterface('js.com.cs.v4.Controls.Form.IMyBaseFormElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.IMyButtonElement

js.com.cs.v4.Controls.Form.IMyButtonElement = function() { 
};
js.com.cs.v4.Controls.Form.IMyButtonElement.prototype = {
    performClick : null,
    createButtonForFormElement : null
}
js.com.cs.v4.Controls.Form.IMyButtonElement.registerInterface('js.com.cs.v4.Controls.Form.IMyButtonElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyBaseButton

js.com.cs.v4.Controls.Form.MyBaseButton = function js_com_cs_v4_Controls_Form_MyBaseButton(dom) {
    /// <param name="dom" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyBaseButton.initializeBase(this, [ dom ]);
}
js.com.cs.v4.Controls.Form.MyBaseButton.prototype = {
    
    createButtonForFormElement: function js_com_cs_v4_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.v4.UI.Forms.Button"></returns>
        var bp = new js.com.cs.v4.UI.Forms.ButtonParams();
        bp.validateFormOnClick = validateFormOnClick;
        bp.validationGroup = validationGroup;
        bp.defaultButton = isDefaultButton;
        bp.confirmMessage = confirmMsg;
        var btn = new js.com.cs.v4.UI.Forms.Button(this.get_element(), bp);
        return btn;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyBaseFormElement

js.com.cs.v4.Controls.Form.MyBaseFormElement = function js_com_cs_v4_Controls_Form_MyBaseFormElement(dom) {
    /// <param name="dom" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <field name="_lastEvent$1" type="js.com.JQueryScriptSharpV2.JQueryEvent">
    /// </field>
    /// <field name="_lastCheckedValue" type="Object">
    /// </field>
    /// <field name="__onChangeEvenWithKeys$1" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    /// <field name="_callTriggerValueChanged$1" type="js.com.cs.v4.Time.DelayedCall">
    /// </field>
    js.com.cs.v4.Controls.Form.MyBaseFormElement.initializeBase(this, [ dom ]);
    this._callTriggerValueChanged$1 = new js.com.cs.v4.Time.DelayedCall(ss.Delegate.create(this, this.triggerEventIfChanged), 25);
    this._initHandlers$1();
}
js.com.cs.v4.Controls.Form.MyBaseFormElement.getFormElement = function js_com_cs_v4_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.v4.Controls.Form.IMyBaseFormElement"></returns>
    if (Type.canCast(elementID, String)) {
        elementID = document.getElementById(elementID);
    }
    var Element = elementID;
    var tagName = Element.tagName.toLowerCase();
    var attribType = '';
    if (Element.attributes.getNamedItem('type') != null) {
        attribType = Element.attributes.getNamedItem('type').value.toLowerCase();
    }
    var formElem = null;
    switch (tagName) {
        case 'input':
            var txt = js.com.cs.v4.Controls.Form.MyTextBox.getTextBoxFromElement(Element);
            if (txt == null) {
                switch (attribType) {
                    case 'checkbox':
                        var chk = new js.com.cs.v4.Controls.Form.MyCheckBox(Element);
                        formElem = chk;
                        break;
                    case 'file':
                        var fu = new js.com.cs.v4.Controls.Form.MyFileUpload(Element);
                        formElem = fu;
                        break;
                    case 'radio':
                        var radio = new js.com.cs.v4.Controls.Form.MyRadioButton(Element);
                        formElem = radio;
                        break;
                }
            }
            else {
                formElem = txt;
            }
            break;
        case 'textarea':
            var txt = new js.com.cs.v4.Controls.Form.MyTextBoxMultiLine(Element);
            formElem = txt;
            break;
        case 'select':
            var cmb = new js.com.cs.v4.Controls.Form.MyDropDownList(Element);
            formElem = cmb;
            break;
    }
    return formElem;
}
js.com.cs.v4.Controls.Form.MyBaseFormElement.prototype = {
    _lastEvent$1: null,
    _lastCheckedValue: false,
    
    add_onChangeEvenWithKeys: function js_com_cs_v4_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 = ss.Delegate.combine(this.__onChangeEvenWithKeys$1, value);
    },
    remove_onChangeEvenWithKeys: function js_com_cs_v4_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 = ss.Delegate.remove(this.__onChangeEvenWithKeys$1, value);
    },
    
    __onChangeEvenWithKeys$1: null,
    _callTriggerValueChanged$1: null,
    
    getFieldFromFormsCollection: function js_com_cs_v4_Controls_Form_MyBaseFormElement$getFieldFromFormsCollection() {
        /// <returns type="js.com.cs.v4.UI.Forms.Field"></returns>
        return js.com.cs.v4.UI.Forms.FormsCollection.get_instance().getFieldByID(this.get_id());
    },
    
    onMouseClickUp: function js_com_cs_v4_Controls_Form_MyBaseFormElement$onMouseClickUp(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._lastEvent$1 = e;
        this._callTriggerValueChanged$1.invoke();
    },
    
    onKeyboardUp: function js_com_cs_v4_Controls_Form_MyBaseFormElement$onKeyboardUp(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._lastEvent$1 = e;
        this._callTriggerValueChanged$1.invoke();
    },
    
    _onValueChanged$1: function js_com_cs_v4_Controls_Form_MyBaseFormElement$_onValueChanged$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._lastEvent$1 = e;
        this._callTriggerValueChanged$1.invoke();
    },
    
    triggerEventIfChanged: function js_com_cs_v4_Controls_Form_MyBaseFormElement$triggerEventIfChanged() {
        if (this.get_valueObject() !== this._lastCheckedValue) {
            this._lastCheckedValue = this.get_valueObject();
            if (this.__onChangeEvenWithKeys$1 != null) {
                this.__onChangeEvenWithKeys$1(this._lastEvent$1);
                this._lastEvent$1 = null;
            }
        }
    },
    
    _initHandlers$1: function js_com_cs_v4_Controls_Form_MyBaseFormElement$_initHandlers$1() {
        this._lastCheckedValue = this.get_valueObject();
        this.add_onChange(ss.Delegate.create(this, this._onValueChanged$1));
        this.add_onKeyUp(ss.Delegate.create(this, this.onKeyboardUp));
        this.add_onMouseUp(ss.Delegate.create(this, this.onMouseClickUp));
    },
    
    get_text: function js_com_cs_v4_Controls_Form_MyBaseFormElement$get_text() {
        /// <value type="String"></value>
        return this.get_value();
    },
    set_text: function js_com_cs_v4_Controls_Form_MyBaseFormElement$set_text(value) {
        /// <value type="String"></value>
        this.set_value(value);
        return value;
    },
    
    get_value: function js_com_cs_v4_Controls_Form_MyBaseFormElement$get_value() {
        /// <value type="String"></value>
        var val = this._jQueryElement.val();
        return (val == null) ? null : val.toString();
    },
    set_value: function js_com_cs_v4_Controls_Form_MyBaseFormElement$set_value(value) {
        /// <value type="String"></value>
        this._lastCheckedValue = value;
        this._jQueryElement.val(value);
        return value;
    },
    
    get_valueObject: function js_com_cs_v4_Controls_Form_MyBaseFormElement$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_value();
    },
    set_valueObject: function js_com_cs_v4_Controls_Form_MyBaseFormElement$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_value(value);
        return value;
    },
    
    clear: function js_com_cs_v4_Controls_Form_MyBaseFormElement$clear() {
        this.set_value('');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyButton

js.com.cs.v4.Controls.Form.MyButton = function js_com_cs_v4_Controls_Form_MyButton(btn) {
    /// <param name="btn" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyButton.initializeBase(this, [ (ss.isNullOrUndefined(btn)) ? js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<input type='button' />") : btn ]);
    if (this.get_jQueryElement().attr('type') !== 'button') {
        this.get_jQueryElement().attr('type', 'button');
    }
}
js.com.cs.v4.Controls.Form.MyButton.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyButton$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyButton.callBaseMethod(this, 'get_element');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyCheckBox

js.com.cs.v4.Controls.Form.MyCheckBox = function js_com_cs_v4_Controls_Form_MyCheckBox(chk) {
    /// <param name="chk" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyCheckBox.initializeBase(this, [ (ss.isNullOrUndefined(chk)) ? js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<input type='checkbox' />") : chk ]);
    if (this.get_jQueryElement().attr('type') !== 'checkbox') {
        this.get_jQueryElement().attr('type', 'checkbox');
    }
}
js.com.cs.v4.Controls.Form.MyCheckBox.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyCheckBox$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyCheckBox.callBaseMethod(this, 'get_element');
    },
    
    get_checked: function js_com_cs_v4_Controls_Form_MyCheckBox$get_checked() {
        /// <value type="Boolean"></value>
        return this.get_element().checked;
    },
    set_checked: function js_com_cs_v4_Controls_Form_MyCheckBox$set_checked(value) {
        /// <value type="Boolean"></value>
        this.get_element().checked = value;
        this._lastCheckedValue = value;
        return value;
    },
    
    clear: function js_com_cs_v4_Controls_Form_MyCheckBox$clear() {
        this.get_element().checked = false;
    },
    
    get_value: function js_com_cs_v4_Controls_Form_MyCheckBox$get_value() {
        /// <value type="Boolean"></value>
        return this.get_checked();
    },
    set_value: function js_com_cs_v4_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);
        }
        this.set_checked(val);
        return value;
    },
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyCheckBox$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox;
    },
    
    get_valueObject: function js_com_cs_v4_Controls_Form_MyCheckBox$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_checked();
    },
    set_valueObject: function js_com_cs_v4_Controls_Form_MyCheckBox$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_checked(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyDropDownListParams

js.com.cs.v4.Controls.Form.MyDropDownListParams = function js_com_cs_v4_Controls_Form_MyDropDownListParams() {
    /// <field name="onChangeRedirectToValue" type="Boolean">
    /// </field>
}
js.com.cs.v4.Controls.Form.MyDropDownListParams.prototype = {
    onChangeRedirectToValue: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyDropDownList

js.com.cs.v4.Controls.Form.MyDropDownList = function js_com_cs_v4_Controls_Form_MyDropDownList(txt, initialDisabledIndices, extraParams) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <param name="initialDisabledIndices" type="Array" elementType="Number" elementInteger="true">
    /// </param>
    /// <param name="extraParams" type="js.com.cs.v4.Controls.Form.MyDropDownListParams">
    /// </param>
    /// <field name="_lastSelectedIndexIE6Workaround$2" type="Number" integer="true">
    /// </field>
    /// <field name="_onChangeRedirectToValue$2" type="Boolean">
    /// </field>
    js.com.cs.v4.Controls.Form.MyDropDownList.initializeBase(this, [ (ss.isNullOrUndefined(txt)) ? js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML('<select />') : txt ]);
    if (ss.isNullOrUndefined(extraParams)) {
        extraParams = {};
    }
    this._initHandlers$2();
    this._initDisabledOptions$2(initialDisabledIndices);
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._selectFirstNotDisabledOption$2));
    this.set_onChangeRedirectToValue(extraParams.onChangeRedirectToValue);
}
js.com.cs.v4.Controls.Form.MyDropDownList.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyDropDownList$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyDropDownList.callBaseMethod(this, 'get_element');
    },
    
    _lastSelectedIndexIE6Workaround$2: 0,
    _onChangeRedirectToValue$2: false,
    
    _selectFirstNotDisabledOption$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_selectFirstNotDisabledOption$2() {
        var isOneSelected = false;
        var selectedValue = this.get_value();
        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 (!this.get_options()[i].disabled && (selectedAttribute === 'selected' || this.get_options()[i].value === selectedValue)) {
                isOneSelected = true;
                break;
            }
        }
        if (!isOneSelected && !this.get_multipleSelect()) {
            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_v4_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 (!ss.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.v4.Util.GeneralUtil.isIE6()) {
                this._ie6DisabledWorkaroundEmulate$2();
            }
        }
    },
    
    _initHandlers$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_initHandlers$2() {
        if (js.com.cs.v4.Util.GeneralUtil.isIE6()) {
            js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._setIE6DisabledWorkaround$2));
        }
    },
    
    _setIE6DisabledWorkaround$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_setIE6DisabledWorkaround$2() {
        this.add_onFocus(ss.Delegate.create(this, this._myDropDownList_onFocus$2));
        this.add_onChangeEvenWithKeys(ss.Delegate.create(this, this._myDropDownList_onChange$2));
        this._ie6DisabledWorkaroundEmulate$2();
    },
    
    _myDropDownList_onChange$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_myDropDownList_onChange$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._ie6DisabledWorkaroundRestore$2();
    },
    
    _myDropDownList_onFocus$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_myDropDownList_onFocus$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._lastSelectedIndexIE6Workaround$2 = this.get_selectedIndex();
    },
    
    _ie6DisabledWorkaroundRestore$2: function js_com_cs_v4_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_v4_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_v4_Controls_Form_MyDropDownList$get_selectedIndex() {
        /// <value type="Number" integer="true"></value>
        return this.get_element().selectedIndex;
    },
    set_selectedIndex: function js_com_cs_v4_Controls_Form_MyDropDownList$set_selectedIndex(value) {
        /// <value type="Number" integer="true"></value>
        this.get_element().selectedIndex = value;
        return value;
    },
    
    clearItems: function js_com_cs_v4_Controls_Form_MyDropDownList$clearItems() {
        js.com.JQueryScriptSharpV2.jQueryUtil.select('option', this.get_element()).remove();
    },
    
    removeItem: function js_com_cs_v4_Controls_Form_MyDropDownList$removeItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        js.com.JQueryScriptSharpV2.jQueryUtil.select('option', this.get_element()).eq(index).remove();
    },
    
    addItem: function js_com_cs_v4_Controls_Form_MyDropDownList$addItem(txt, value) {
        /// <param name="txt" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        this.addItemAt(txt, value, this.get_options().length);
    },
    
    addItemAt: function js_com_cs_v4_Controls_Form_MyDropDownList$addItemAt(txt, value, index) {
        /// <param name="txt" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <param name="index" type="Number" integer="true">
        /// </param>
        if (ss.isNullOrUndefined(value)) {
            value = txt;
        }
        if (ss.isNullOrUndefined(index)) {
            index = this.get_options().length;
        }
        var html = "<option value='" + value + "'>" + txt + '</option>';
        var options = js.com.JQueryScriptSharpV2.jQueryUtil.select('option', this.get_element());
        if (index < options.length) {
            options.eq(index).before(html);
        }
        else {
            this._jQueryElement.append(html);
        }
    },
    
    _addOption$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_addOption$2(jOption, index) {
        /// <param name="jOption" type="jQuery">
        /// </param>
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var options = js.com.JQueryScriptSharpV2.jQueryUtil.select('option', this.get_element());
        if (index < options.length) {
            options.eq(index).before(jOption);
        }
        else {
            this._jQueryElement.append(jOption);
        }
    },
    
    addItemFromOption: function js_com_cs_v4_Controls_Form_MyDropDownList$addItemFromOption(elem, index) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        /// <param name="index" type="Number" integer="true">
        /// </param>
        if (ss.isNullOrUndefined(index)) {
            index = this.get_options().length;
        }
        this.addItemAt(elem.text, elem.value, index);
    },
    
    get_options: function js_com_cs_v4_Controls_Form_MyDropDownList$get_options() {
        /// <value type="Array" elementType="Object" elementDomElement="true"></value>
        return this.get_element().options;
    },
    
    setOptions: function js_com_cs_v4_Controls_Form_MyDropDownList$setOptions(elements) {
        /// <param name="elements" type="Array" elementType="Object" elementDomElement="true">
        /// </param>
        this.clearItems();
        for (var i = 0; i < elements.length; i++) {
            this.addItemFromOption(elements[i], this.get_options().length);
        }
    },
    
    callChange: function js_com_cs_v4_Controls_Form_MyDropDownList$callChange() {
        var obj = this.onchange;
        if (obj != null) {
            this.onchange();
        }
    },
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyDropDownList$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.select;
    },
    
    get_selectedText: function js_com_cs_v4_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 = this.get_jQueryElement().attr('value');
            if (attrValue != null && attrValue === this.get_value()) {
                return option.innerHTML;
            }
        }
        return null;
    },
    
    get_onChangeRedirectToValue: function js_com_cs_v4_Controls_Form_MyDropDownList$get_onChangeRedirectToValue() {
        /// <value type="Boolean"></value>
        return this._onChangeRedirectToValue$2;
    },
    set_onChangeRedirectToValue: function js_com_cs_v4_Controls_Form_MyDropDownList$set_onChangeRedirectToValue(value) {
        /// <value type="Boolean"></value>
        if (value) {
            this.add_onChange(ss.Delegate.create(this, this._onChangeRedirect$2));
        }
        else {
            this.remove_onChange(ss.Delegate.create(this, this._onChangeRedirect$2));
        }
        this._onChangeRedirectToValue$2 = value;
        return value;
    },
    
    _onChangeRedirect$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_onChangeRedirect$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        js.com.cs.v4.Util.WindowUtil.changeLocation(this.get_value());
    },
    
    cloneOptions: function js_com_cs_v4_Controls_Form_MyDropDownList$cloneOptions() {
        /// <summary>
        /// Returns a cloned copy of the options element of this dropdown list
        /// </summary>
        /// <returns type="Array" elementType="Object" elementDomElement="true"></returns>
        var elements = [];
        for (var i = 0; i < this.get_options().length; i++) {
            var elem = this.get_options()[i];
            elements[elements.length] = elem;
        }
        return elements;
    },
    
    sortOptions: function js_com_cs_v4_Controls_Form_MyDropDownList$sortOptions(ascending) {
        /// <param name="ascending" type="Boolean">
        /// </param>
        if (ss.isNullOrUndefined(ascending)) {
            ascending = true;
        }
        var elems = this.cloneOptions();
        if (ascending) {
            elems.sort(js.com.cs.v4.Util.SortUtil.sortOptionElementsAscending);
        }
        else {
            elems.sort(js.com.cs.v4.Util.SortUtil.sortOptionElementsDescending);
        }
        this.setOptions(elems);
    },
    
    get_multipleSelect: function js_com_cs_v4_Controls_Form_MyDropDownList$get_multipleSelect() {
        /// <value type="Boolean"></value>
        return this.get_size() > 1;
    },
    
    get_size: function js_com_cs_v4_Controls_Form_MyDropDownList$get_size() {
        /// <value type="Number" integer="true"></value>
        var val = this.get_jQueryElement().attr('size');
        if (Type.canCast(val, Number)) {
            return val;
        }
        else {
            return 1;
        }
    },
    set_size: function js_com_cs_v4_Controls_Form_MyDropDownList$set_size(value) {
        /// <value type="Number" integer="true"></value>
        this.get_jQueryElement().attr('size', value.toString());
        return value;
    },
    
    _updateSelectedAttribute$2: function js_com_cs_v4_Controls_Form_MyDropDownList$_updateSelectedAttribute$2() {
    },
    
    get_value: function js_com_cs_v4_Controls_Form_MyDropDownList$get_value() {
        /// <value type="String"></value>
        return js.com.cs.v4.Controls.Form.MyDropDownList.callBaseMethod(this, 'get_value');
    },
    set_value: function js_com_cs_v4_Controls_Form_MyDropDownList$set_value(value) {
        /// <value type="String"></value>
        js.com.cs.v4.Controls.Form.MyDropDownList.callBaseMethod(this, 'set_value', [ value ]);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyFileUpload

js.com.cs.v4.Controls.Form.MyFileUpload = function js_com_cs_v4_Controls_Form_MyFileUpload(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyFileUpload.initializeBase(this, [ (ss.isNullOrUndefined(txt)) ? js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<input type='file' />") : txt ]);
    this.get_element().type = 'file';
}
js.com.cs.v4.Controls.Form.MyFileUpload.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyFileUpload$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyFileUpload.callBaseMethod(this, 'get_element');
    },
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyFileUpload$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.fileUpload;
    },
    
    get_valueObject: function js_com_cs_v4_Controls_Form_MyFileUpload$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_value();
    },
    set_valueObject: function js_com_cs_v4_Controls_Form_MyFileUpload$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_value(value);
        return value;
    },
    
    uploadify: function js_com_cs_v4_Controls_Form_MyFileUpload$uploadify(settings) {
        /// <param name="settings" type="js.com.JQueryScriptSharpV2._UploadifySettings">
        /// </param>
        this.get_jQueryElement().uploadify(settings);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyRadioButton

js.com.cs.v4.Controls.Form.MyRadioButton = function js_com_cs_v4_Controls_Form_MyRadioButton(radioButton) {
    /// <param name="radioButton" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyRadioButton.initializeBase(this, [ (ss.isNullOrUndefined(radioButton)) ? js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<input type='radio' />") : radioButton ]);
    if (this.get_jQueryElement().attr('type') !== 'radio') {
        this.get_jQueryElement().attr('type', 'radio');
    }
    this._init$2();
}
js.com.cs.v4.Controls.Form.MyRadioButton.updateRadioListInitialChecked = function js_com_cs_v4_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.JQueryScriptSharpV2.jQueryUtil.select("input[type='radio']", js.com.JQueryScriptSharpV2.jQueryUtil.selectById(elemID));
    for (var i = 0; i < jInput.length; i++) {
        var rd = new js.com.cs.v4.Controls.Form.MyRadioButton(jInput.get(i));
        var attrChecked = rd.get_element().attributes.getNamedItem('checked');
        if (attrChecked != null) {
            if (attrChecked.value.toLowerCase() === 'checked' || attrChecked.value.toLowerCase() === 'true') {
                rd.set_checked(true);
            }
        }
    }
}
js.com.cs.v4.Controls.Form.MyRadioButton.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyRadioButton$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyRadioButton.callBaseMethod(this, 'get_element');
    },
    
    _initHandlers$2: function js_com_cs_v4_Controls_Form_MyRadioButton$_initHandlers$2() {
        js.com.cs.v4.Util.WindowUtil.add_onKeyUp(ss.Delegate.create(this, this.onKeyboardUp));
        js.com.cs.v4.Util.WindowUtil.add_onMouseUp(ss.Delegate.create(this, this.onMouseClickUp));
        this.remove_onKeyUp(ss.Delegate.create(this, this.onKeyboardUp));
        this.remove_onMouseUp(ss.Delegate.create(this, this.onMouseClickUp));
    },
    
    _init$2: function js_com_cs_v4_Controls_Form_MyRadioButton$_init$2() {
        this._initHandlers$2();
    },
    
    get_checked: function js_com_cs_v4_Controls_Form_MyRadioButton$get_checked() {
        /// <value type="Boolean"></value>
        return this.get_element().checked;
    },
    set_checked: function js_com_cs_v4_Controls_Form_MyRadioButton$set_checked(value) {
        /// <value type="Boolean"></value>
        this.get_element().checked = value;
        return value;
    },
    
    clear: function js_com_cs_v4_Controls_Form_MyRadioButton$clear() {
        this.get_element().checked = false;
    },
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyRadioButton$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton;
    },
    
    get_valueObject: function js_com_cs_v4_Controls_Form_MyRadioButton$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_checked();
    },
    set_valueObject: function js_com_cs_v4_Controls_Form_MyRadioButton$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_checked(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyTextBox

js.com.cs.v4.Controls.Form.MyTextBox = function js_com_cs_v4_Controls_Form_MyTextBox(txt, type) {
    /// <param name="txt" type="jQuery">
    /// </param>
    /// <param name="type" type="String">
    /// </param>
    js.com.cs.v4.Controls.Form.MyTextBox.initializeBase(this, [ (ss.isNullOrUndefined(txt)) ? txt = js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<input type='" + type + "' />") : txt ]);
    if (type != null && this.get_element().type !== type) {
        if (js.com.cs.v4.Util.GeneralUtil.isIE() > 0 && this.get_element().parentNode != null) {
            var e = document.createElement('input');
            e.type = type;
            this._jQueryElement.before(e);
            this.get_element().parentNode.removeChild(this.get_element());
            e.id = this.get_element().id;
            this._jQueryElement = js.com.JQueryScriptSharpV2.jQueryUtil.selectByElements(e);
        }
        else {
            this.get_element().type = type;
        }
    }
}
js.com.cs.v4.Controls.Form.MyTextBox.getTextBoxFromElement = function js_com_cs_v4_Controls_Form_MyTextBox$getTextBoxFromElement(element) {
    /// <param name="element" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <returns type="js.com.cs.v4.Controls.Form.MyTextBox"></returns>
    element = js.com.cs.v4.Controls.Common.MyElement.getElement(element);
    var txt = null;
    if (element != null) {
        if (element.get_tagName() === 'input') {
            switch (element.get_tagType()) {
                case 'hidden':
                    txt = new js.com.cs.v4.Controls.Form.MyTextBoxHidden(element.get_element());
                    break;
                case 'password':
                    txt = new js.com.cs.v4.Controls.Form.MyTextBoxPassword(element.get_element());
                    break;
                case 'text':
                case '':
                    txt = new js.com.cs.v4.Controls.Form.MyTextBoxSingleLine(element.get_element());
                    break;
            }
        }
        else if (element.get_tagName() === 'textarea') {
            txt = new js.com.cs.v4.Controls.Form.MyTextBoxMultiLine(element.get_element());
        }
    }
    return txt;
}
js.com.cs.v4.Controls.Form.MyTextBox.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyTextBox$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyTextBox.callBaseMethod(this, 'get_element');
    },
    
    select: function js_com_cs_v4_Controls_Form_MyTextBox$select() {
        this.get_element().select(null);
    },
    
    get_autoComplete: function js_com_cs_v4_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_v4_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_v4_Controls_Form_MyTextBox$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxSingleLine;
    },
    
    get_valueObject: function js_com_cs_v4_Controls_Form_MyTextBox$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_text();
    },
    set_valueObject: function js_com_cs_v4_Controls_Form_MyTextBox$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_text(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyTextBoxHidden

js.com.cs.v4.Controls.Form.MyTextBoxHidden = function js_com_cs_v4_Controls_Form_MyTextBoxHidden(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyTextBoxHidden.initializeBase(this, [ (ss.isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'hidden' ]);
}
js.com.cs.v4.Controls.Form.MyTextBoxHidden.prototype = {
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyTextBoxHidden$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxHidden;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyTextBoxMultiLine

js.com.cs.v4.Controls.Form.MyTextBoxMultiLine = function js_com_cs_v4_Controls_Form_MyTextBoxMultiLine(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyTextBoxMultiLine.initializeBase(this, [ (ss.isNullOrUndefined(txt)) ? document.createElement('textarea') : txt, null ]);
}
js.com.cs.v4.Controls.Form.MyTextBoxMultiLine.prototype = {
    
    get_element: function js_com_cs_v4_Controls_Form_MyTextBoxMultiLine$get_element() {
        /// <value type="Object" domElement="true"></value>
        return js.com.cs.v4.Controls.Form.MyTextBoxMultiLine.callBaseMethod(this, 'get_element');
    },
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyTextBoxMultiLine$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxMultiLine;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyTextBoxPassword

js.com.cs.v4.Controls.Form.MyTextBoxPassword = function js_com_cs_v4_Controls_Form_MyTextBoxPassword(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyTextBoxPassword.initializeBase(this, [ (ss.isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'password' ]);
}
js.com.cs.v4.Controls.Form.MyTextBoxPassword.prototype = {
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyTextBoxPassword$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxPassword;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.MyTextBoxSingleLine

js.com.cs.v4.Controls.Form.MyTextBoxSingleLine = function js_com_cs_v4_Controls_Form_MyTextBoxSingleLine(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v4.Controls.Form.MyTextBoxSingleLine.initializeBase(this, [ txt, 'text' ]);
    this.initStateHandlers();
}
js.com.cs.v4.Controls.Form.MyTextBoxSingleLine.prototype = {
    
    get_controlType: function js_com_cs_v4_Controls_Form_MyTextBoxSingleLine$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxSingleLine;
    }
}


Type.registerNamespace('js.com.cs.v4.Controls.Form.Specialized');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenu

js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenu = function js_com_cs_v4_Controls_Form_Specialized_MyDropDownListMenu() {
    /// <field name="cmbParent" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="cmbChild" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
}
js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenu.prototype = {
    cmbParent: null,
    cmbChild: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenuListItem

js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenuListItem = function js_com_cs_v4_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.v4.Classes.General.Arrays.MyArray">
    /// List of ListItem
    /// </field>
    js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenuListItem.initializeBase(this, [ txt, value ]);
    this._subItems$1 = new js.com.cs.v4.Classes.General.Arrays.MyArray();
}
js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenuListItem.prototype = {
    _subItems$1: null,
    
    addSubItem: function js_com_cs_v4_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.v4.Classes.General.ListItem(txt, value);
        this._subItems$1.push(li);
    },
    
    addSubItemsToField: function js_com_cs_v4_Controls_Form_Specialized_MyDropDownListMenuListItem$addSubItemsToField(cmb) {
        /// <param name="cmb" type="js.com.cs.v4.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.registerNamespace('js.com.cs.v4.Controls');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Controls.RedirectController

js.com.cs.v4.Controls.RedirectController = function js_com_cs_v4_Controls_RedirectController(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <field name="_url" type="String">
    /// </field>
    if (!url.startsWith('http')) {
        url = 'http://' + url;
    }
    this._url = url;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.Controls.RedirectController.prototype = {
    _url: null,
    
    _redirect: function js_com_cs_v4_Controls_RedirectController$_redirect() {
        js.com.cs.v4.Util.WindowUtil.changeLocation(this._url);
    },
    
    _init: function js_com_cs_v4_Controls_RedirectController$_init() {
        window.setTimeout(ss.Delegate.create(this, this._redirect), 50);
    }
}


Type.registerNamespace('js.com.cs.v4.Core');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Core.Destroyable

js.com.cs.v4.Core.Destroyable = function js_com_cs_v4_Core_Destroyable() {
    /// <field name="_destroyed" type="Boolean">
    /// </field>
}
js.com.cs.v4.Core.Destroyable.prototype = {
    _destroyed: false,
    
    get_destroyed: function js_com_cs_v4_Core_Destroyable$get_destroyed() {
        /// <value type="Boolean"></value>
        return this._destroyed;
    },
    
    destroy: function js_com_cs_v4_Core_Destroyable$destroy() {
        this._destroyed = true;
    }
}


Type.registerNamespace('js.com.cs.v4.Events');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Events.EventItem

js.com.cs.v4.Events.EventItem = function js_com_cs_v4_Events_EventItem() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Events.EventsHandler

js.com.cs.v4.Events.EventsHandler = function js_com_cs_v4_Events_EventsHandler() {
    /// <field name="events" type="Array" elementType="EventItem">
    /// </field>
    this.events = [];
}
js.com.cs.v4.Events.EventsHandler.prototype = {
    events: null,
    
    addEventListener: function js_com_cs_v4_Events_EventsHandler$addEventListener(eventName, handler) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="ss.Delegate">
        /// </param>
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Events.GenericEventItem

js.com.cs.v4.Events.GenericEventItem = function js_com_cs_v4_Events_GenericEventItem() {
    /// <field name="eventName" type="String">
    /// </field>
    /// <field name="handler" type="ss.Delegate">
    /// </field>
    /// <field name="scope" type="Object">
    /// </field>
}
js.com.cs.v4.Events.GenericEventItem.prototype = {
    eventName: null,
    handler: null,
    scope: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Events.GenericEventsHandler

js.com.cs.v4.Events.GenericEventsHandler = function js_com_cs_v4_Events_GenericEventsHandler() {
    /// <field name="_events" type="Array" elementType="GenericEventItem">
    /// </field>
    this._events = [];
}
js.com.cs.v4.Events.GenericEventsHandler.prototype = {
    _events: null,
    
    addListener: function js_com_cs_v4_Events_GenericEventsHandler$addListener(eventName, handler, scope) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="ss.Delegate">
        /// </param>
        /// <param name="scope" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        if (ss.isNullOrUndefined(scope)) {
            scope = js.com.cs.v4.Util.GeneralUtil.getDelegateScope(handler);
        }
        var item = new js.com.cs.v4.Events.GenericEventItem();
        item.eventName = eventName;
        item.handler = handler;
        item.scope = scope;
        this._events[this._events.length] = item;
        return js.com.cs.v4.Util.GeneralUtil.getDelegateFunction(item.handler);
    },
    
    removeListener: function js_com_cs_v4_Events_GenericEventsHandler$removeListener(eventName, handler, returnDelegateNotFunction) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="ss.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.v4.Util.GeneralUtil.compareDelegate(item.handler, handler)) {
                var method = js.com.cs.v4.Util.GeneralUtil.getDelegateFunction(item.handler);
                (this._events).removeAt(i);
                if (returnDelegateNotFunction) {
                    return item.handler;
                }
                else {
                    return method;
                }
            }
        }
        return null;
    }
}


Type.registerNamespace('js.com.cs.v4.Interfaces');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Interfaces.IDestroyable

js.com.cs.v4.Interfaces.IDestroyable = function() { 
};
js.com.cs.v4.Interfaces.IDestroyable.prototype = {
    get_destroyed : null,
    destroy : null
}
js.com.cs.v4.Interfaces.IDestroyable.registerInterface('js.com.cs.v4.Interfaces.IDestroyable');


Type.registerNamespace('js.com.cs.v4.Plugins.Cufon');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.Cufon.CufonOptions

js.com.cs.v4.Plugins.Cufon.CufonOptions = function js_com_cs_v4_Plugins_Cufon_CufonOptions() {
    /// <field name="autoDetect" type="Boolean">
    /// </field>
    /// <field name="color" type="String">
    /// </field>
    /// <field name="fontFamily" type="String">
    /// </field>
    /// <field name="fontSize" type="String">
    /// </field>
    /// <field name="fontStretch" type="String">
    /// normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded
    /// </field>
    /// <field name="fontStyle" type="String">
    /// normal, italic, oblique
    /// </field>
    /// <field name="fontWeight" type="Object">
    /// </field>
    /// <field name="forceHitArea" type="Boolean">
    /// </field>
    /// <field name="hover" type="Boolean">
    /// </field>
    /// <field name="hoverables" type="Object">
    /// Defines which elements :hover is used with. Defaults to links only as IE6 can�t handle anything else.
    /// </field>
    /// <field name="ignoreClass" type="String">
    /// Allows you to ignore elements based on a single or multiple class names. If an element matches one of the class names, it will not be processed by Cuf�n. Its children will be left alone too. (since: 1.10)
    /// </field>
    /// <field name="letterSpacing" type="String">
    /// </field>
    /// <field name="modifyText" type="js.com.cs.v4.Plugins.Cufon.CufonModifyTextHandler">
    /// </field>
    /// <field name="onAfterReplace" type="js.com.cs.v4.Plugins.Cufon.CufonReplaceHandler">
    /// </field>
    /// <field name="onBeforeReplace" type="js.com.cs.v4.Plugins.Cufon.CufonReplaceHandler">
    /// </field>
    /// <field name="selector" type="String">
    /// </field>
    /// <field name="separate" type="String">
    /// How to separate pieces of text. By default each word is considered a unit of its own, which works well with multi-line text. �none� is only suitable for single lines of text.
    /// 'words', 'none' or 'characters'
    /// </field>
    /// <field name="softHyphens" type="Boolean">
    /// Whether soft hyphens are enabled or not. Note that soft hyphens inside invisible (display: none) content are not supported because their coordinates cannot be calculated. (since: 1.10)
    /// </field>
    /// <field name="textShadow" type="String">
    /// </field>
    /// <field name="textTransform" type="String">
    /// </field>
    /// <field name="trim" type="String">
    /// If �simple�, trims all preceding and following whitespace in adjacent text nodes. If �advanced�, attempts to be more intelligent (i.e. does not simply remove everything). Note that �simple� can be too simple, and �advanced� not intelligent enough. Whitespace problems can usually be fixed by using a less greedy selector (e.g. Cufon.replace('body') is very bad, Cufon.replace('h1') much better). (since: 1.10)
    /// </field>
}
js.com.cs.v4.Plugins.Cufon.CufonOptions.prototype = {
    autoDetect: false,
    color: null,
    fontFamily: null,
    fontSize: null,
    fontStretch: null,
    fontStyle: null,
    fontWeight: null,
    forceHitArea: false,
    hover: false,
    hoverables: null,
    ignoreClass: null,
    letterSpacing: null,
    modifyText: null,
    onAfterReplace: null,
    onBeforeReplace: null,
    selector: null,
    separate: null,
    softHyphens: false,
    textShadow: null,
    textTransform: null,
    trim: null
}


Type.registerNamespace('js.com.cs.v4.Plugins.JWPlayer.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventBase() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBuffer

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBuffer = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventBuffer() {
    /// <field name="oldstate" type="String">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBuffer.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBuffer.prototype = {
    oldstate: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferChange

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferChange = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventBufferChange() {
    /// <field name="bufferPercent" type="Number">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferChange.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferChange.prototype = {
    bufferPercent: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferFull

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferFull = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventBufferFull() {
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferFull.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventComplete

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventComplete = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventComplete() {
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventComplete.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventError

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventError = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventError() {
    /// <field name="message" type="String">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventError.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventError.prototype = {
    message: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventFullscreen

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventFullscreen = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventFullscreen() {
    /// <field name="fullscreen" type="Boolean">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventFullscreen.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventFullscreen.prototype = {
    fullscreen: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventIdle

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventIdle = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventIdle() {
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventIdle.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMeta

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMeta = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventMeta() {
    /// <field name="metadata" type="Object">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMeta.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMeta.prototype = {
    metadata: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMute

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMute = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventMute() {
    /// <field name="mute" type="Boolean">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMute.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMute.prototype = {
    mute: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPause

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPause = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventPause() {
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPause.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlay

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlay = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventPlay() {
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlay.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylist

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylist = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventPlaylist() {
    /// <field name="playlist" type="Array" elementType="JWPlayerPlaylistItem">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylist.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylist.prototype = {
    playlist: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylistItem

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylistItem = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventPlaylistItem() {
    /// <field name="index" type="Number" integer="true">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylistItem.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylistItem.prototype = {
    index: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventReady

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventReady = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventReady() {
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventReady.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventResize

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventResize = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventResize() {
    /// <field name="width" type="Number" integer="true">
    /// </field>
    /// <field name="height" type="Number" integer="true">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventResize.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventResize.prototype = {
    width: 0,
    height: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventStateChange() {
    /// <field name="oldstate" type="String">
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange.prototype = {
    oldstate: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventTime

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventTime = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventTime() {
    /// <field name="duration" type="Number" integer="true">
    /// umber: Duration of the current item in seconds.
    /// </field>
    /// <field name="offset" type="Number" integer="true">
    /// When playing streaming media, this value contains the last unbuffered seek offset.
    /// </field>
    /// <field name="position" type="Number" integer="true">
    /// Playback position in seconds.
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventTime.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventTime.prototype = {
    duration: 0,
    offset: 0,
    position: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventVolume

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventVolume = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerEventVolume() {
    /// <field name="volume" type="Number">
    /// 0..100
    /// </field>
    js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventVolume.initializeBase(this);
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventVolume.prototype = {
    volume: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerObjectConfig

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerObjectConfig = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerObjectConfig() {
    /// <field name="flashplayer" type="String">
    /// </field>
    /// <field name="file" type="String">
    /// </field>
    /// <field name="height" type="String">
    /// </field>
    /// <field name="width" type="String">
    /// </field>
    /// <field name="events" type="Array" elementType="EventHandler">
    /// </field>
    /// <field name="autostart" type="Boolean">
    /// Set this to true to automatically start the player on load.
    /// </field>
    /// <field name="bufferlength" type="Number" integer="true">
    /// Number of seconds of the file that has to be loaded before starting. Set this to a low value to enable instant-start and to a high value to get less mid-stream buffering.
    /// </field>
    /// <field name="id" type="String">
    /// Unique identifier of the player in the HTML DOM. You only need to set this option if you want to use the JavaScript API and want to target Linux users.
    /// The ID is needed by JavaScript to get a reference to the player. On Windows and Mac OS X, the player automatically reads the ID from the id and name attributes of the player's HTML embed code. On Linux however, this functionality does not work. Setting the id option in addition to the HTML attributes will fix this problem.
    /// </field>
    /// <field name="item" type="js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerPlaylistItem">
    /// PlaylistItem that should start to play. Use this to start the player with a specific item selected.
    /// </field>
    /// <field name="mute" type="Boolean">
    /// Mute all sounds on startup. This can be overridden by a user's cookie, which stores the user's last muting state.
    /// </field>
    /// <field name="playerready" type="EventHandler">
    /// By default, the player calls a playerReady() JavaScript function when it is initialized. This option is used to let the player call a different function after it�s initialized (e.g. registerPlayer()).
    /// </field>
    /// <field name="plugins" type="String">
    /// A powerful feature, this is a comma-separated list of plugins to load (e.g. "hd,viral"). Plugins are separate SWF files that extend the functionality of the player, e.g. with advertising, analytics or viral sharing features. Visit our AddOns repository to browse the long list of available plugins.
    /// </field>
    /// <field name="repeat" type="String">
    /// hat to do when the mediafile has ended. Has several options:
    /// none: do nothing (stop playback) whever a file is completed.
    /// list: play each file in the playlist once, stop at the end.
    /// always: continously play the file (or all files in the playlist).
    /// single: continously repeat the current file in the playlist.
    /// </field>
    /// <field name="shuffle" type="Boolean">
    /// Shuffle playback of playlist items. The player will randomly pick the items.
    /// </field>
    /// <field name="smoothing" type="Boolean">
    /// This sets the smoothing of videos, so you won�t see blocks when a video is upscaled. Set this to false to disable the feature and get performance improvements with old computers / big files.
    /// </field>
    /// <field name="stretching" type="String">
    /// Defines how to resize the poster image and video to fit the display. Can be:
    /// none: keep the original dimensions
    /// exactfit: disproportionally stretch the video/image to exactly fit the display.
    /// uniform: stretch the image/video while maintaining its aspect ratio. Borders will appear around the image/video.
    /// fill: stretch the image/video while maintaining its aspect ratio, completely filling the display. This results in cropping the media.
    /// </field>
    /// <field name="volume" type="Number">
    /// Startup volume of the player. Can be 0 to 100.
    /// </field>
    /// <field name="backcolor" type="String">
    /// background color of the controlbar and playlist. This is white by default (FFFFFF).
    /// </field>
    /// <field name="frontcolor" type="String">
    /// color of all icons and texts in the controlbar and playlist. Black by default. (000000)
    /// </field>
    /// <field name="lightcolor" type="String">
    /// color of an icon or text when you rollover it with the mouse. Black by default. (000000)
    /// </field>
    /// <field name="screencolor" type="String">
    /// background color of the display. Black by default. (000000)
    /// </field>
    /// <field name="controlbar" type="String">
    /// position of the controlbar. Can be set to bottom, top, over and none.
    /// </field>
    /// <field name="dock" type="Boolean">
    /// set this to true to show plugin buttons in controlbar. By default (false), plugin buttons are shown in the display.
    /// </field>
    /// <field name="icons" type="Boolean">
    /// set this to false to hide the play button and buffering icon in the display.
    /// </field>
    /// <field name="playlist" type="String">
    /// position of the playlist. Can be set to bottom, top, over, right or none.
    /// </field>
    /// <field name="playlistsize" type="Number" integer="true">
    /// when below this refers to the height, when right this refers to the width of the playlist.
    /// </field>
    /// <field name="skin" type="String">
    /// location of a skin file containing graphics which change the look of the player. There are two types of skins available:
    /// XML/PNG skins: these skins consist of an XML file with settings and a bunch of PNG images. The files are packed up in a ZIP, which improves the time it takes for them to load over the network. Building your own skin is extremely easy and can be done with any basic image and text editor. See XML/PNG Skinning for more info.
    /// SWF skins: these skins consist of a single SWF file, built using Adobe Flash. This type of skin has been supported since the 4.0 player. Since SWF skins can only be built using Flash (a $500+ package) and since this skinning model can easily break, SWF skins are considered deprecated in favor of PNG skins.
    /// </field>
    /// <field name="provider" type="String">
    /// IMPORTANT: If the filename is not of the video, then this is required
    /// Set this flashvar to tell the player in which format (regular/streaming) the player is. By default, the provider is detected by the player based upon the file extension. If there is no suiteable extension, it can be manually set. The following provider strings are supported
    /// video: progressively downloaded FLV / MP4 video, but also AAC audio. See Media Support.
    /// sound: progressively downloaded MP3 files. See Media Support.
    /// image: JPG/GIF/PNG images. See Media Support.
    /// youtube: videos from Youtube. See Media Support.
    /// http: FLV/MP4 videos using HTTP pseudo-streaming. See HTTP Pseudostreaming.
    /// rtmp: FLV/MP4/MP3 files or live streams using RTMP streaming. See RTMP Streaming.
    /// Note - In addition to these built-in providers, it is possible to load custom providers into the JW Player, e.g. for specific CDN support. Custom providers are packed in a separate SWF file, much like a plugin.
    /// A number of custom providers is available from our AddOns repository. Third party developers interested in building a custom provider should check our our developer site, which includes documentation and a MediaProvider SDK.
    /// </field>
    /// <field name="duration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerObjectConfig.prototype = {
    flashplayer: null,
    file: null,
    height: null,
    width: null,
    events: null,
    autostart: false,
    bufferlength: 0,
    
    get_fullscreen: function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerObjectConfig$get_fullscreen() {
        /// <summary>
        /// Fullscreen state of the player. This is a read-only flashvar, useful for plugins. Available since 4.4.
        /// </summary>
        /// <value type="Boolean"></value>
        return false;
    },
    
    id: null,
    item: null,
    mute: false,
    playerready: null,
    plugins: null,
    repeat: null,
    shuffle: false,
    smoothing: false,
    stretching: null,
    volume: 0,
    backcolor: null,
    frontcolor: null,
    lightcolor: null,
    screencolor: null,
    controlbar: null,
    dock: false,
    icons: false,
    playlist: null,
    playlistsize: 0,
    skin: null,
    provider: null,
    duration: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerPlaylistItem

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerPlaylistItem = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerPlaylistItem() {
    /// <field name="duration" type="Number" integer="true">
    /// duration of the file in seconds.
    /// </field>
    /// <field name="file" type="String">
    /// location of the mediafile or playlist to play.
    /// </field>
    /// <field name="image" type="String">
    /// location of a preview image; shown in display and playlist.
    /// </field>
    /// <field name="playlistfile" type="String">
    /// Location of an XML playlist to load into the player.
    /// </field>
    /// <field name="provider" type="String">
    /// this is determines what type of mediafile this item is, and thus which provider the player should use for playback. By default, the provider is detected by the player based upon the file extension. If there's no suitable extension or the player detects the wrong provider, it can be manually set. The following default providers are supported:
    /// video: progressively downloaded FLV / MP4 video, but also AAC audio.
    /// sound: progressively downloaded MP3 files.
    /// image: JPG/GIF/PNG images.
    /// youtube: videos from YouTube.
    /// http: FLV/MP4 videos played as http pseudo-streaming.
    /// rtmp: FLV/MP4/MP3 files played from an RTMP server.
    /// </field>
    /// <field name="start" type="Number" integer="true">
    /// position in seconds where playback has to start. Won't work for regular (progressive) videos, but only for streaming (HTTP / RTMP).
    /// </field>
    /// <field name="streamer" type="Object">
    /// location of an rtmp/http server instance to use for streaming. Can be an RTMP application or external PHP/ASP file. More info here.
    /// </field>
    /// <field name="mediaid" type="String">
    /// unique string (e.g. 9Ks83JsK) used to identify this media file. Is used by certain plugins, e.g. for the targeting of advertisements. The player itself doesn�t use this ID anywhere.
    /// </field>
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerPlaylistItem.prototype = {
    duration: 0,
    file: null,
    image: null,
    playlistfile: null,
    provider: null,
    start: 0,
    streamer: null,
    mediaid: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerWrapper

js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerWrapper = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerWrapper() {
}
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerWrapper.getJWPlayer = function js_com_cs_v4_Plugins_JWPlayer_v1_JWPlayerWrapper$getJWPlayer(id) {
    /// <param name="id" type="String">
    /// </param>
    /// <returns type="JWPlayerObject"></returns>
    var obj = null;
    if (!ss.isNull(id)) {
        if (Type.canCast(id, String)) {
            obj = eval("jwplayer('" + id + "')");
        }
        else if (Type.canCast(id, Object)) {
            obj = eval('jwplayer(id)');
        }
    }
    else {
        obj = eval('jwplayer()');
    }
    return obj;
}


Type.registerNamespace('js.com.cs.v4.Time');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Time.DelayedCall

js.com.cs.v4.Time.DelayedCall = function js_com_cs_v4_Time_DelayedCall(handler, delayMS, param1, param2) {
    /// <param name="handler" type="Action">
    /// </param>
    /// <param name="delayMS" type="Number" integer="true">
    /// </param>
    /// <param name="param1" type="Object">
    /// </param>
    /// <param name="param2" type="Object">
    /// </param>
    /// <field name="_handler$1" type="Action">
    /// </field>
    /// <field name="_handlerInt$1" type="js.com.cs.v4.Time.IntHandler">
    /// </field>
    /// <field name="_handlerString$1" type="js.com.cs.v4.Time.StringHandler">
    /// </field>
    /// <field name="_handlerBool$1" type="js.com.cs.v4.Time.BoolHandler">
    /// </field>
    /// <field name="_handlerBool2$1" type="js.com.cs.v4.Time.Bool2Handler">
    /// </field>
    /// <field name="_delayMS$1" type="Number" integer="true">
    /// </field>
    /// <field name="_intervalHandler$1" type="Number" integer="true">
    /// </field>
    /// <field name="_params$1" type="Array" elementType="Object">
    /// </field>
    this._intervalHandler$1 = -1;
    this._params$1 = [];
    js.com.cs.v4.Time.DelayedCall.initializeBase(this);
    this._params$1[0] = param1;
    this._params$1[1] = param2;
    if (Type.canCast(param1, String)) {
        this._handlerString$1 = handler;
    }
    else if (Type.canCast(param1, Boolean)) {
        this._handlerBool$1 = handler;
    }
    else if (Type.canCast(param2, Boolean)) {
        this._handlerBool2$1 = handler;
    }
    else if (Type.canCast(param1, Number)) {
        this._handlerInt$1 = handler;
    }
    else if (ss.isNullOrUndefined(param1) && ss.isNullOrUndefined(param2)) {
        this._handler$1 = handler;
    }
    else {
        throw new Error('Handler not supported.. add delegate');
    }
    this._delayMS$1 = delayMS;
}
js.com.cs.v4.Time.DelayedCall.prototype = {
    _handler$1: null,
    _handlerInt$1: null,
    _handlerString$1: null,
    _handlerBool$1: null,
    _handlerBool2$1: null,
    _delayMS$1: 0,
    
    get_delayMS: function js_com_cs_v4_Time_DelayedCall$get_delayMS() {
        /// <value type="Number" integer="true"></value>
        return this._delayMS$1;
    },
    set_delayMS: function js_com_cs_v4_Time_DelayedCall$set_delayMS(value) {
        /// <value type="Number" integer="true"></value>
        this._delayMS$1 = value;
        return value;
    },
    
    get_intervalHandler: function js_com_cs_v4_Time_DelayedCall$get_intervalHandler() {
        /// <value type="Number" integer="true"></value>
        return this._intervalHandler$1;
    },
    
    cancel: function js_com_cs_v4_Time_DelayedCall$cancel() {
        if (this._intervalHandler$1 !== -1) {
            window.clearTimeout(this._intervalHandler$1);
            this._intervalHandler$1 = -1;
        }
    },
    
    _doInvoke$1: function js_com_cs_v4_Time_DelayedCall$_doInvoke$1() {
        if (!this.get_destroyed()) {
            if (this._handler$1 != null) {
                this._handler$1();
            }
            else if (this._handlerString$1 != null) {
                this._handlerString$1(this._params$1[0]);
            }
            else if (this._handlerBool$1 != null) {
                this._handlerBool$1(this._params$1[0]);
            }
            else if (this._handlerBool2$1 != null) {
                this._handlerBool2$1(this._params$1[0], this._params$1[1]);
            }
            else if (this._handlerInt$1 != null) {
                this._handlerInt$1(this._params$1[0]);
            }
        }
    },
    
    invoke: function js_com_cs_v4_Time_DelayedCall$invoke() {
        if (!this.get_destroyed()) {
            this.cancel();
            this._intervalHandler$1 = window.setTimeout(ss.Delegate.create(this, this._doInvoke$1), this._delayMS$1);
        }
    },
    
    destroy: function js_com_cs_v4_Time_DelayedCall$destroy() {
        this.cancel();
        js.com.cs.v4.Time.DelayedCall.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Time.Interval

js.com.cs.v4.Time.Interval = function js_com_cs_v4_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.v4.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.v4.Time.Interval.initializeBase(this);
    this._delayMS$1 = delayMS;
    this._repeatCount$1 = repeatCount;
    this._data$1 = data;
}
js.com.cs.v4.Time.Interval.prototype = {
    
    add_onTick: function js_com_cs_v4_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 = ss.Delegate.combine(this.__onTick$1, value);
    },
    remove_onTick: function js_com_cs_v4_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 = ss.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_v4_Time_Interval$get_running() {
        /// <value type="Boolean"></value>
        return this._running$1;
    },
    set_running: function js_com_cs_v4_Time_Interval$set_running(value) {
        /// <value type="Boolean"></value>
        this._running$1 = value;
        return value;
    },
    
    get_repeatCount: function js_com_cs_v4_Time_Interval$get_repeatCount() {
        /// <value type="Number" integer="true"></value>
        return this._repeatCount$1;
    },
    set_repeatCount: function js_com_cs_v4_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_v4_Time_Interval$get_delayMS() {
        /// <value type="Number" integer="true"></value>
        return this._delayMS$1;
    },
    set_delayMS: function js_com_cs_v4_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_v4_Time_Interval$start(reset) {
        /// <param name="reset" type="Boolean">
        /// </param>
        if (ss.isNullOrUndefined(reset)) {
            reset = false;
        }
        if (reset) {
            this.reset();
        }
        if (!this._running$1) {
            this._running$1 = true;
            this._handler$1 = window.setInterval(ss.Delegate.create(this, this._tick$1), this._delayMS$1);
        }
    },
    
    _tick$1: function js_com_cs_v4_Time_Interval$_tick$1() {
        this._completeTicks$1++;
        var doNotForceStop = true;
        if (this.__onTick$1 != null) {
            doNotForceStop = this.__onTick$1(this, this._completeTicks$1, this._data$1);
        }
        if (this._completeTicks$1 === this._repeatCount$1 || !doNotForceStop) {
            this.stop();
        }
    },
    
    reset: function js_com_cs_v4_Time_Interval$reset() {
        this._completeTicks$1 = 0;
    },
    
    stop: function js_com_cs_v4_Time_Interval$stop() {
        if (this._running$1) {
            this._running$1 = false;
            window.clearInterval(this._handler$1);
        }
    },
    
    destroy: function js_com_cs_v4_Time_Interval$destroy() {
        this.stop();
        js.com.cs.v4.Time.Interval.callBaseMethod(this, 'destroy');
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Accordion');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Accordion.Accordion

js.com.cs.v4.UI.Accordion.Accordion = function js_com_cs_v4_UI_Accordion_Accordion(info) {
    /// <param name="info" type="js.com.cs.v4.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>
    this._mainUL = info.ulElement;
    this._slideDuration = info.slideDuration;
    this._allowMultiple = info.allowMultipleOpen;
    this._openIfContainsCheckedItems = info.openIfContainsCheckedItems;
    this._openedElements = [];
    if (this._mainUL != null) {
        js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
    }
}
js.com.cs.v4.UI.Accordion.Accordion.prototype = {
    _mainUL: null,
    _slideDuration: 0,
    _liChildren: null,
    _mouseOverUL_private: false,
    _currUL: null,
    _openIfContainsCheckedItems: false,
    
    get__mouseOverUL: function js_com_cs_v4_UI_Accordion_Accordion$get__mouseOverUL() {
        /// <value type="Boolean"></value>
        return this._mouseOverUL_private;
    },
    set__mouseOverUL: function js_com_cs_v4_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_v4_UI_Accordion_Accordion$_init() {
        this._setLIChildren();
        this._hideChildrenULs();
        this._initAttach();
    },
    
    _setLIChildren: function js_com_cs_v4_UI_Accordion_Accordion$_setLIChildren() {
        if (this._mainUL != null) {
            this._liChildren = this._mainUL.children();
        }
    },
    
    _hideChildrenULs: function js_com_cs_v4_UI_Accordion_Accordion$_hideChildrenULs() {
        this._openIfContainsCheckedItems = true;
        var childrenUL = js.com.JQueryScriptSharpV2.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.JQueryScriptSharpV2.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_v4_UI_Accordion_Accordion$_initAttach() {
        this._attachChildrenLI();
        this._attachMouseOverUL();
    },
    
    _attachMouseOverUL: function js_com_cs_v4_UI_Accordion_Accordion$_attachMouseOverUL() {
        var ulChildren = js.com.JQueryScriptSharpV2.jQueryUtil.select('ul.super-ul li.level-0 ul');
        ulChildren.mouseover(ss.Delegate.create(this, this._mouseOverUL));
        ulChildren.mouseout(ss.Delegate.create(this, this._mouseOutUL));
    },
    
    _mouseOverUL: function js_com_cs_v4_UI_Accordion_Accordion$_mouseOverUL(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.set__mouseOverUL(true);
    },
    
    _mouseOutUL: function js_com_cs_v4_UI_Accordion_Accordion$_mouseOutUL(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.set__mouseOverUL(false);
    },
    
    _attachChildrenLI: function js_com_cs_v4_UI_Accordion_Accordion$_attachChildrenLI() {
        for (var i = 0; i < this._liChildren.length; i++) {
            this._liChildren.eq(i).click(ss.Delegate.create(this, this._elem_onClick));
        }
    },
    
    _elem_onClick: function js_com_cs_v4_UI_Accordion_Accordion$_elem_onClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var item = (e.currentTarget);
        var elem = new js.com.cs.v4.Controls.Common.MyElement(item);
        if (!this.get__mouseOverUL()) {
            var firstUL = js.com.JQueryScriptSharpV2.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.JQueryScriptSharpV2.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.v4.UI.Accordion.AccordionDetails

js.com.cs.v4.UI.Accordion.AccordionDetails = function js_com_cs_v4_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.v4.UI.Accordion.AccordionDetails.prototype = {
    ulElement: null,
    slideDuration: 0,
    allowMultipleOpen: false,
    openIfContainsCheckedItems: false
}


Type.registerNamespace('js.com.cs.v4.UI.Accordion.v2');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Accordion.v2.AccordionV2

js.com.cs.v4.UI.Accordion.v2.AccordionV2 = function js_com_cs_v4_UI_Accordion_v2_AccordionV2(ulRoot, settings) {
    /// <param name="ulRoot" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </param>
    /// <param name="settings" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings">
    /// </param>
    /// <field name="_rootLevel$1" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
    /// </field>
    /// <field name="__onOpenLevel$1" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onCloseLevel$1" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onToggleLevel$1" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    js.com.cs.v4.UI.Accordion.v2.AccordionV2.initializeBase(this);
    this._rootLevel$1 = new js.com.cs.v4.UI.Accordion.v2.AccordionV2Level(null, ulRoot, null, settings);
    this._init$1();
}
js.com.cs.v4.UI.Accordion.v2.AccordionV2.prototype = {
    _rootLevel$1: null,
    
    add_onOpenLevel: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$add_onOpenLevel(value) {
        /// <param name="value" type="Function" />
        this.__onOpenLevel$1 = ss.Delegate.combine(this.__onOpenLevel$1, value);
    },
    remove_onOpenLevel: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$remove_onOpenLevel(value) {
        /// <param name="value" type="Function" />
        this.__onOpenLevel$1 = ss.Delegate.remove(this.__onOpenLevel$1, value);
    },
    
    __onOpenLevel$1: null,
    
    add_onCloseLevel: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$add_onCloseLevel(value) {
        /// <param name="value" type="Function" />
        this.__onCloseLevel$1 = ss.Delegate.combine(this.__onCloseLevel$1, value);
    },
    remove_onCloseLevel: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$remove_onCloseLevel(value) {
        /// <param name="value" type="Function" />
        this.__onCloseLevel$1 = ss.Delegate.remove(this.__onCloseLevel$1, value);
    },
    
    __onCloseLevel$1: null,
    
    add_onToggleLevel: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$add_onToggleLevel(value) {
        /// <param name="value" type="Function" />
        this.__onToggleLevel$1 = ss.Delegate.combine(this.__onToggleLevel$1, value);
    },
    remove_onToggleLevel: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$remove_onToggleLevel(value) {
        /// <param name="value" type="Function" />
        this.__onToggleLevel$1 = ss.Delegate.remove(this.__onToggleLevel$1, value);
    },
    
    __onToggleLevel$1: null,
    
    _initHandlers$1: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$_initHandlers$1() {
        this._rootLevel$1.add_onOpenChild(ss.Delegate.create(this, this._rootLevel_OnOpenChild$1));
        this._rootLevel$1.add_onCloseChild(ss.Delegate.create(this, this._rootLevel_OnCloseChild$1));
        this._rootLevel$1.add_onToggleChild(ss.Delegate.create(this, this._rootLevel_OnToggleChild$1));
    },
    
    _rootLevel_OnToggleChild$1: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$_rootLevel_OnToggleChild$1(level) {
        /// <param name="level" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
        /// </param>
        if (this.__onToggleLevel$1 != null) {
            this.__onToggleLevel$1(level);
        }
    },
    
    _rootLevel_OnCloseChild$1: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$_rootLevel_OnCloseChild$1(level) {
        /// <param name="level" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
        /// </param>
        if (this.__onCloseLevel$1 != null) {
            this.__onCloseLevel$1(level);
        }
    },
    
    _rootLevel_OnOpenChild$1: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$_rootLevel_OnOpenChild$1(level) {
        /// <param name="level" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
        /// </param>
        if (this.__onOpenLevel$1 != null) {
            this.__onOpenLevel$1(level);
        }
    },
    
    _init$1: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$_init$1() {
        this._initHandlers$1();
    },
    
    openChildListElements: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$openChildListElements(liElements, openParents, withAnimations) {
        /// <summary>
        /// Open up the set of list elements passed here.
        /// </summary>
        /// <param name="liElements" type="jQuery">
        /// </param>
        /// <param name="openParents" type="Boolean">
        /// Whether to open up even the parents of them until root
        /// </param>
        /// <param name="withAnimations" type="Boolean">
        /// Use animations
        /// </param>
        /// <returns type="Boolean"></returns>
        var ok = false;
        for (var i = 0; i < liElements.length; i++) {
            var singleLiElement = liElements.eq(i);
            ok = ok || this._rootLevel$1.openLevelFromListElement(singleLiElement, openParents, withAnimations);
        }
        return ok;
    },
    
    openChildAnchorElements: function js_com_cs_v4_UI_Accordion_v2_AccordionV2$openChildAnchorElements(aElements, openParents, withAnimations) {
        /// <summary>
        /// Open up the set of anchor elements passed here.
        /// </summary>
        /// <param name="aElements" type="jQuery">
        /// </param>
        /// <param name="openParents" type="Boolean">
        /// Whether to open up even the parents of them until root
        /// </param>
        /// <param name="withAnimations" type="Boolean">
        /// Use animations
        /// </param>
        /// <returns type="Boolean"></returns>
        var ok = false;
        for (var i = 0; i < aElements.length; i++) {
            var singleAnchorElement = aElements.eq(i);
            var singleLiElement = singleAnchorElement.parent();
            ok = ok || this._rootLevel$1.openLevelFromListElement(singleLiElement, openParents, withAnimations);
        }
        return ok;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Accordion.v2.AccordionV2Level

js.com.cs.v4.UI.Accordion.v2.AccordionV2Level = function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level(liLevel, ulChildren, parent, settings) {
    /// <param name="liLevel" type="js.com.cs.v4.Controls.Common.MyListItemElem">
    /// </param>
    /// <param name="ulChildren" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </param>
    /// <param name="parent" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
    /// </param>
    /// <param name="settings" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings">
    /// </param>
    /// <field name="__onOpen" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onClose" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onToggle" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onOpenChild" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onCloseChild" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="__onToggleChild" type="js.com.cs.v4.UI.Accordion.v2.ToggleHandler">
    /// </field>
    /// <field name="_liLevel" type="js.com.cs.v4.Controls.Common.MyListItemElem">
    /// </field>
    /// <field name="_aLiLevel" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_ulChildren" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="_btnCollapseExpand" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_settings" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings">
    /// </field>
    /// <field name="_childLevels" type="Array" elementType="AccordionV2Level">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
    /// </field>
    /// <field name="_opened" type="Boolean">
    /// </field>
    this._childLevels = [];
    this._parent = parent;
    this._settings = settings;
    this._liLevel = liLevel;
    this._ulChildren = ulChildren;
    this._init();
}
js.com.cs.v4.UI.Accordion.v2.AccordionV2Level.prototype = {
    
    add_onOpen: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$add_onOpen(value) {
        /// <param name="value" type="Function" />
        this.__onOpen = ss.Delegate.combine(this.__onOpen, value);
    },
    remove_onOpen: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$remove_onOpen(value) {
        /// <param name="value" type="Function" />
        this.__onOpen = ss.Delegate.remove(this.__onOpen, value);
    },
    
    __onOpen: null,
    
    add_onClose: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$add_onClose(value) {
        /// <param name="value" type="Function" />
        this.__onClose = ss.Delegate.combine(this.__onClose, value);
    },
    remove_onClose: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$remove_onClose(value) {
        /// <param name="value" type="Function" />
        this.__onClose = ss.Delegate.remove(this.__onClose, value);
    },
    
    __onClose: null,
    
    add_onToggle: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$add_onToggle(value) {
        /// <param name="value" type="Function" />
        this.__onToggle = ss.Delegate.combine(this.__onToggle, value);
    },
    remove_onToggle: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$remove_onToggle(value) {
        /// <param name="value" type="Function" />
        this.__onToggle = ss.Delegate.remove(this.__onToggle, value);
    },
    
    __onToggle: null,
    
    add_onOpenChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$add_onOpenChild(value) {
        /// <param name="value" type="Function" />
        this.__onOpenChild = ss.Delegate.combine(this.__onOpenChild, value);
    },
    remove_onOpenChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$remove_onOpenChild(value) {
        /// <param name="value" type="Function" />
        this.__onOpenChild = ss.Delegate.remove(this.__onOpenChild, value);
    },
    
    __onOpenChild: null,
    
    add_onCloseChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$add_onCloseChild(value) {
        /// <param name="value" type="Function" />
        this.__onCloseChild = ss.Delegate.combine(this.__onCloseChild, value);
    },
    remove_onCloseChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$remove_onCloseChild(value) {
        /// <param name="value" type="Function" />
        this.__onCloseChild = ss.Delegate.remove(this.__onCloseChild, value);
    },
    
    __onCloseChild: null,
    
    add_onToggleChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$add_onToggleChild(value) {
        /// <param name="value" type="Function" />
        this.__onToggleChild = ss.Delegate.combine(this.__onToggleChild, value);
    },
    remove_onToggleChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$remove_onToggleChild(value) {
        /// <param name="value" type="Function" />
        this.__onToggleChild = ss.Delegate.remove(this.__onToggleChild, value);
    },
    
    __onToggleChild: null,
    _liLevel: null,
    _aLiLevel: null,
    _ulChildren: null,
    _btnCollapseExpand: null,
    _settings: null,
    _parent: null,
    
    get_parent: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$get_parent() {
        /// <value type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level"></value>
        return this._parent;
    },
    
    get_childLevels: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$get_childLevels() {
        /// <value type="Array" elementType="AccordionV2Level"></value>
        return this._childLevels;
    },
    
    _opened: false,
    
    _initChildren: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_initChildren() {
        var hasChildren = false;
        if (this._ulChildren != null) {
            var children = this._ulChildren.get_jQueryElement().children();
            for (var i = 0; i < children.length; i++) {
                var childLI = children.eq(i);
                var childLIUL = childLI.children('ul');
                var ulChild = null;
                if (childLIUL.length > 0) {
                    ulChild = new js.com.cs.v4.Controls.Common.MyUnOrderedListElem(childLIUL.eq(0));
                }
                var childLevel = new js.com.cs.v4.UI.Accordion.v2.AccordionV2Level(new js.com.cs.v4.Controls.Common.MyListItemElem(childLI), ulChild, this, this._settings);
                this._childLevels[this._childLevels.length] = childLevel;
                childLevel.add_onOpen(ss.Delegate.create(this, this._childLevel_OnOpenChild));
                childLevel.add_onOpenChild(ss.Delegate.create(this, this._childLevel_OnOpenChild));
                childLevel.add_onCloseChild(ss.Delegate.create(this, this._childLevel_OnCloseChild));
                childLevel.add_onClose(ss.Delegate.create(this, this._childLevel_OnCloseChild));
                childLevel.add_onToggleChild(ss.Delegate.create(this, this._childLevel_OnToggleChild));
                childLevel.add_onToggle(ss.Delegate.create(this, this._childLevel_OnToggleChild));
            }
            hasChildren = children.length > 0;
        }
        if (this._liLevel != null) {
            this._liLevel.addClass((hasChildren) ? this._settings.cssClassLiChildren : this._settings.cssClassLiNoChildren);
            if (hasChildren && this._settings.addCollapseExpandButton) {
                this._addExpandCollapseButton();
            }
            if (hasChildren) {
                this._ulChildren.get_jQueryElement().slideUp(0);
            }
        }
    },
    
    _childLevel_OnToggleChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_childLevel_OnToggleChild(level) {
        /// <param name="level" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
        /// </param>
        if (this.__onToggleChild != null) {
            this.__onToggleChild(level);
        }
    },
    
    _childLevel_OnOpenChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_childLevel_OnOpenChild(level) {
        /// <param name="level" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
        /// </param>
        if (this.__onOpenChild != null) {
            this.__onOpenChild(level);
        }
    },
    
    _childLevel_OnCloseChild: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_childLevel_OnCloseChild(level) {
        /// <param name="level" type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level">
        /// </param>
        if (this.__onCloseChild != null) {
            this.__onCloseChild(level);
        }
    },
    
    _addExpandCollapseButton: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_addExpandCollapseButton() {
        var elem = this._liLevel;
        if (!this._settings.addCollapseExpandButtonToLiOrATag) {
            elem = this._aLiLevel;
        }
        this._btnCollapseExpand = new js.com.cs.v4.Controls.Common.MyAnchorElement();
        elem.get_jQueryElement().prepend(this._btnCollapseExpand.get_jQueryElement());
        this._btnCollapseExpand.add_onClick(ss.Delegate.create(this, this._btnCollapseExpand_onClick));
        this._updateCss();
    },
    
    _updateCss: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_updateCss() {
        if (this._btnCollapseExpand != null) {
            if (this._opened) {
                this._btnCollapseExpand.addClass(this._settings.cssClassCollapseButton);
                this._btnCollapseExpand.removeClass(this._settings.cssClassExpandButton);
            }
            else {
                this._btnCollapseExpand.addClass(this._settings.cssClassExpandButton);
                this._btnCollapseExpand.removeClass(this._settings.cssClassCollapseButton);
            }
        }
        if (this._aLiLevel != null) {
            this._aLiLevel.toggle2CssClasses(this._settings.cssClassMenuOpen, this._settings.cssClassMenuClosed, this._opened);
        }
        if (this._liLevel != null) {
            this._liLevel.toggle2CssClasses(this._settings.cssClassMenuOpen, this._settings.cssClassMenuClosed, this._opened);
        }
    },
    
    _btnCollapseExpand_onClick: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_btnCollapseExpand_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.toggleOpen(true);
    },
    
    toggleOpen: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$toggleOpen(withAnimations) {
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        if (this._opened) {
            this.close(withAnimations);
        }
        else {
            this.open(withAnimations);
        }
    },
    
    openThisAndParents: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$openThisAndParents(withAnimations) {
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        if (this._parent != null) {
            this._parent.openThisAndParents(withAnimations);
        }
        this.open(withAnimations);
    },
    
    open: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$open(withAnimations) {
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        if (!this._opened) {
            this._opened = true;
            this._updateCss();
            this._ulChildren.get_jQueryElement().slideDown((withAnimations) ? this._settings.durationMSOpen : 0);
            if (this.__onOpen != null) {
                this.__onOpen(this);
            }
            if (this.__onToggle != null) {
                this.__onToggle(this);
            }
        }
    },
    
    close: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$close(withAnimations) {
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        if (this._opened) {
            this._opened = false;
            this._updateCss();
            this._ulChildren.get_jQueryElement().slideUp((withAnimations) ? this._settings.durationMSClose : 0);
            if (this.__onClose != null) {
                this.__onClose(this);
            }
            if (this.__onToggle != null) {
                this.__onToggle(this);
            }
        }
    },
    
    _initLink: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_initLink() {
        if (this._liLevel != null) {
            var aLi = this._liLevel.get_jQueryElement().children('a');
            if (aLi.length > 0) {
                this._aLiLevel = new js.com.cs.v4.Controls.Common.MyAnchorElement(aLi.eq(0));
            }
        }
    },
    
    _init: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$_init() {
        this._initChildren();
        this._initLink();
    },
    
    getLevelFromListElement: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$getLevelFromListElement(liElement) {
        /// <param name="liElement" type="jQuery">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Accordion.v2.AccordionV2Level"></returns>
        if (this._liLevel != null && liElement.get(0) === this._liLevel.get_jQueryElement().get(0)) {
            return this;
        }
        else {
            for (var i = 0; i < this.get_childLevels().length; i++) {
                var level = this.get_childLevels()[i];
                var matchedLevel = level.getLevelFromListElement(liElement);
                if (matchedLevel != null) {
                    return matchedLevel;
                }
            }
        }
        return null;
    },
    
    openLevelFromListElement: function js_com_cs_v4_UI_Accordion_v2_AccordionV2Level$openLevelFromListElement(liElement, openParents, withAnimations) {
        /// <param name="liElement" type="jQuery">
        /// </param>
        /// <param name="openParents" type="Boolean">
        /// </param>
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        var li = this.getLevelFromListElement(liElement);
        if (li != null) {
            li.openThisAndParents(withAnimations);
            return true;
        }
        return false;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings

js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings = function js_com_cs_v4_UI_Accordion_v2_AccordionV2Settings() {
    /// <field name="addCollapseExpandButton" type="Boolean">
    /// </field>
    /// <field name="cssClassCollapseButton" type="String">
    /// </field>
    /// <field name="cssClassExpandButton" type="String">
    /// </field>
    /// <field name="cssClassLiChildren" type="String">
    /// </field>
    /// <field name="cssClassLiNoChildren" type="String">
    /// </field>
    /// <field name="cssClassMenuOpen" type="String">
    /// </field>
    /// <field name="cssClassMenuClosed" type="String">
    /// </field>
    /// <field name="clickOnlyOnLeafNodes" type="Boolean">
    /// </field>
    /// <field name="durationMSOpen" type="Number" integer="true">
    /// </field>
    /// <field name="durationMSClose" type="Number" integer="true">
    /// </field>
    /// <field name="easingOpen" type="String">
    /// </field>
    /// <field name="easingClose" type="String">
    /// </field>
    /// <field name="addCollapseExpandButtonToLiOrATag" type="Boolean">
    /// true = to 'li', false = to 'a href'
    /// </field>
}
js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings.prototype = {
    addCollapseExpandButton: true,
    cssClassCollapseButton: 'accordion-v2-collapse-button',
    cssClassExpandButton: 'accordion-v2-expand-button',
    cssClassLiChildren: 'accordion-v2-contains-children',
    cssClassLiNoChildren: 'accordion-v2-no-children',
    cssClassMenuOpen: 'accordion-v2-open',
    cssClassMenuClosed: 'accordion-v2-closed',
    clickOnlyOnLeafNodes: false,
    durationMSOpen: 250,
    durationMSClose: 250,
    easingOpen: null,
    easingClose: null,
    addCollapseExpandButtonToLiOrATag: true
}


Type.registerNamespace('js.com.cs.v4.UI');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.AJAXLoader

js.com.cs.v4.UI.AJAXLoader = function js_com_cs_v4_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.v4.Controls.Common.MyTableCellElement">
    /// </field>
    /// <field name="_img$2" type="js.com.cs.v4.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.v4.UI.AJAXLoader.initializeBase(this);
    this.addClass(cssClassName_Prepend + 'tbLoading');
    this.imageLoadingSrc = imgLoadingSrc;
    this._initControls$2(cssClassName_Prepend);
}
js.com.cs.v4.UI.AJAXLoader.prototype = {
    imageLoadingSrc: null,
    loadingText: 'Loading ...',
    imageSrc: null,
    text: null,
    _tdText$2: null,
    _img$2: null,
    
    _initControls$2: function js_com_cs_v4_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.v4.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_v4_UI_AJAXLoader$attachToControl(domElem) {
        /// <param name="domElem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        var ctrlPos = new js.com.cs.v4.UI.CtrlPositionerOld();
        ctrlPos.positionControl(domElem, this);
    },
    
    attachToValueChecker: function js_com_cs_v4_UI_AJAXLoader$attachToValueChecker(valueChecker, imageSrc_Yes, Text_Yes, imageSrc_No, Text_No) {
        /// <param name="valueChecker" type="js.com.cs.v4.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(ss.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_v4_UI_AJAXLoader$_valueChecker_OnChangedStatus$2(sender, status) {
        /// <param name="sender" type="js.com.cs.v4.Classes.Validation.ValueChecker">
        /// </param>
        /// <param name="status" type="js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS">
        /// </param>
        if (!String.isNullOrEmpty(sender.formElement.get_value())) {
            this.get_style().display = '';
            switch (status) {
                case js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.hidden:
                case js.com.cs.v4.Classes.Validation.VALUECHECKER_STATUS.loading:
                    this._img$2.set_src(this.imageLoadingSrc);
                    this._tdText$2.set_innerText(this.loadingText);
                    break;
                case js.com.cs.v4.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.v4.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.v4.UI.CtrlPositionerOld

js.com.cs.v4.UI.CtrlPositionerOld = function js_com_cs_v4_UI_CtrlPositionerOld() {
    /// <field name="ctrlToPositionWith" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="ctrl" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="divElem" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="alignPosition" type="js.com.cs.v4.Enums.POSITION">
    /// </field>
    /// <field name="marginTop" type="Number" integer="true">
    /// </field>
    /// <field name="marginLeft" type="Number" integer="true">
    /// </field>
    this.alignPosition = js.com.cs.v4.Enums.POSITION.right;
}
js.com.cs.v4.UI.CtrlPositionerOld.prototype = {
    ctrlToPositionWith: null,
    ctrl: null,
    divElem: null,
    marginTop: 5,
    marginLeft: 5,
    
    _getWidth: function js_com_cs_v4_UI_CtrlPositionerOld$_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_element() !== js.com.cs.v4.Util.DOMUtil.get_body().get_element()) {
                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_v4_UI_CtrlPositionerOld$_setPosition() {
        var left = 0, top = 0;
        switch (this.alignPosition) {
            case js.com.cs.v4.Enums.POSITION.topLeft:
            case js.com.cs.v4.Enums.POSITION.topRight:
            case js.com.cs.v4.Enums.POSITION.top:
                left = 0;
                top = 0 - this.ctrl.getOuterHeight(true) - this.marginTop;
                break;
            case js.com.cs.v4.Enums.POSITION.left:
                left = 0 - this.ctrl.getOuterWidth(true) - this.marginLeft;
                top = 0;
                break;
            case js.com.cs.v4.Enums.POSITION.center:
            case js.com.cs.v4.Enums.POSITION.right:
                left = this.ctrlToPositionWith.getOuterWidth(true) + this.marginLeft;
                top = 0;
                break;
            case js.com.cs.v4.Enums.POSITION.bottomLeft:
            case js.com.cs.v4.Enums.POSITION.bottomRight:
            case js.com.cs.v4.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_v4_UI_CtrlPositionerOld$_addControl() {
        this.divElem = new js.com.cs.v4.Controls.Common.MyDivElement();
        this.ctrlToPositionWith.get_jQueryElement().after(this.divElem.get_element());
        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_v4_UI_CtrlPositionerOld$positionControl(ctrlToPositionWith, ctrl) {
        /// <param name="ctrlToPositionWith" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="ctrl" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        this.ctrlToPositionWith = ctrlToPositionWith;
        this.ctrl = ctrl;
        this._addControl();
        this._setPosition();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Image

js.com.cs.v4.UI.Image = function js_com_cs_v4_UI_Image(element) {
    /// <param name="element" type="js.com.cs.v4.Controls.Common.MyImageElement">
    /// </param>
    /// <field name="ImageNormal" type="String">
    /// </field>
    /// <field name="ImageRollover" type="String">
    /// </field>
    /// <field name="_onClick_ClickButton" type="js.com.cs.v4.Controls.Form.MyButton">
    /// </field>
    /// <field name="_preloadImg" type="js.com.cs.v4.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_image" type="js.com.cs.v4.Controls.Common.MyImageElement">
    /// </field>
    if (Type.canCast(element, js.com.cs.v4.Controls.Common.MyImageElement)) {
        this._image = element;
    }
    else {
        this._image = new js.com.cs.v4.Controls.Common.MyImageElement(element);
    }
    this.ImageNormal = this._image.get_src();
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._onLoad));
}
js.com.cs.v4.UI.Image.prototype = {
    ImageNormal: null,
    ImageRollover: null,
    _onClick_ClickButton: null,
    _preloadImg: null,
    _image: null,
    
    SetOnClick_ClickButton: function js_com_cs_v4_UI_Image$SetOnClick_ClickButton(id) {
        /// <param name="id" type="js.com.cs.v4.Controls.Form.MyButton">
        /// </param>
        var btn = new js.com.cs.v4.Controls.Form.MyButton();
        if (Type.canCast(id, String)) {
            var elem = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(id).get(0);
            if (elem != null) {
                this._onClick_ClickButton = new js.com.cs.v4.Controls.Form.MyButton(elem);
            }
        }
        else {
            this._onClick_ClickButton = id;
        }
    },
    
    _imageClick: function js_com_cs_v4_UI_Image$_imageClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._onClick_ClickButton != null) {
            this._onClick_ClickButton.focus();
            this._onClick_ClickButton.performClick();
        }
    },
    
    _imageMouseOver: function js_com_cs_v4_UI_Image$_imageMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (!String.isNullOrEmpty(this.ImageRollover)) {
            this._image.set_src(this.ImageRollover);
        }
    },
    
    _imageMouseOut: function js_com_cs_v4_UI_Image$_imageMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (!String.isNullOrEmpty(this.ImageNormal)) {
            this._image.set_src(this.ImageNormal);
        }
    },
    
    _imageRolloverPreloaded: function js_com_cs_v4_UI_Image$_imageRolloverPreloaded(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._preloadImg = null;
    },
    
    _startPreloadingImage: function js_com_cs_v4_UI_Image$_startPreloadingImage() {
        if (this._preloadImg == null) {
            this._preloadImg = new js.com.cs.v4.Controls.Common.MyImageElement();
            this._preloadImg.add_onLoad(ss.Delegate.create(this, this._imageRolloverPreloaded));
        }
        this._preloadImg.set_src(this.ImageRollover);
    },
    
    _onLoad: function js_com_cs_v4_UI_Image$_onLoad() {
        if (!ss.isNullOrUndefined(this.ImageRollover)) {
            this._startPreloadingImage();
        }
        if (this._image != null) {
            this._image.add_onClick(ss.Delegate.create(this, this._imageClick));
            this._image.add_onMouseOver(ss.Delegate.create(this, this._imageMouseOver));
            this._image.add_onMouseOut(ss.Delegate.create(this, this._imageMouseOut));
        }
    },
    
    changeImage: function js_com_cs_v4_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.registerNamespace('js.com.cs.v4.UI.CountryCallingCode');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnector

js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnector = function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnector(parameters) {
    /// <summary>
    /// This connects a country dropdown with the country code of a mobile phone dropdown
    /// </summary>
    /// <param name="parameters" type="js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams">
    /// </param>
    /// <field name="_parameters" type="js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams">
    /// </field>
    /// <field name="_cmbCountry" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="_cmbCallingCode" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    this._parameters = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnector.prototype = {
    _parameters: null,
    _cmbCountry: null,
    _cmbCallingCode: null,
    
    _initControls: function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnector$_initControls() {
        this._cmbCountry = new js.com.cs.v4.Controls.Form.MyDropDownList(this._parameters.cmbCountryID);
        this._cmbCallingCode = new js.com.cs.v4.Controls.Form.MyDropDownList(this._parameters.cmbCallingCodeID);
        this._cmbCountry.add_onChangeEvenWithKeys(ss.Delegate.create(this, this._cmbCountry_OnChangeEvenWithKeys));
        this._cmbCountry_OnChangeEvenWithKeys(null);
    },
    
    _selectCallingCode: function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnector$_selectCallingCode(code) {
        /// <param name="code" type="String">
        /// </param>
        for (var i = 0; i < this._cmbCallingCode.get_options().length; i++) {
            var opt = this._cmbCallingCode.get_options()[i];
            var optValue = opt.text;
            optValue = optValue.replaceAll('+', '');
            optValue = js.com.cs.v4.Util.StringUtil.trim(optValue);
            if (optValue === code) {
                this._cmbCallingCode.set_selectedIndex(i);
                break;
            }
        }
    },
    
    _cmbCountry_OnChangeEvenWithKeys: function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnector$_cmbCountry_OnChangeEvenWithKeys(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var countryValue = this._cmbCountry.get_value();
        if (countryValue != null) {
            countryValue = countryValue.toLowerCase();
        }
        for (var i = 0; i < this._parameters.options.length; i++) {
            var option = this._parameters.options[i];
            if (option.country.toLowerCase() === countryValue) {
                var callingCode = this._parameters.options[i].callingCode;
                this._selectCallingCode(callingCode);
                break;
            }
        }
    },
    
    _init: function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnector$_init() {
        this._initControls();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorOptionParams

js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorOptionParams = function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnectorOptionParams() {
    /// <field name="country" type="String">
    /// </field>
    /// <field name="callingCode" type="String">
    /// </field>
}
js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorOptionParams.prototype = {
    country: null,
    callingCode: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams

js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams = function js_com_cs_v4_UI_CountryCallingCode_CountryCallingCodeConnectorParams() {
    /// <field name="options" type="Array" elementType="CountryCallingCodeConnectorOptionParams">
    /// </field>
    /// <field name="cmbCountryID" type="String">
    /// </field>
    /// <field name="cmbCallingCodeID" type="String">
    /// </field>
    this.options = [];
}
js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams.prototype = {
    options: null,
    cmbCountryID: null,
    cmbCallingCodeID: null
}


Type.registerNamespace('js.com.cs.v4.UI.DropDownMenu.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS

js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS = function() { 
    /// <field name="topHorizAlignLeft" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="topHorizAlignCenter" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="topHorizAlignRight" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bottomHorizAlignLeft" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bottomHorizAlignCenter" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bottomHorizAlignRight" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.prototype = {
    topHorizAlignLeft: 0, 
    topHorizAlignCenter: 4, 
    topHorizAlignRight: 8, 
    bottomHorizAlignLeft: 10, 
    bottomHorizAlignCenter: 14, 
    bottomHorizAlignRight: 18, 
    right: 20, 
    left: 30
}
js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.registerEnum('js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS

js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS = function() { 
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS.prototype = {
    left: 0, 
    right: 10
}
js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS.registerEnum('js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE

js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE = function() { 
    /// <field name="none" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="opacityFade" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="slide" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.prototype = {
    none: 10, 
    opacityFade: 20, 
    slide: 30
}
js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.registerEnum('js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu

js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu = function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenu(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters">
    /// </param>
    /// <field name="_parameters" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters">
    /// </field>
    /// <field name="_rootLevel" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel">
    /// </field>
    this._parameters = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu.prototype = {
    _parameters: null,
    
    get_parameters: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenu$get_parameters() {
        /// <value type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters"></value>
        return this._parameters;
    },
    
    _rootLevel: null,
    
    _initMenu: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenu$_initMenu() {
        var jUL = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(this._parameters.ulElementID);
        if (jUL.length > 0) {
            var ulElem = jUL.get(0);
            if (ulElem.tagName.toLowerCase() !== 'ul') {
                jUL = jUL.children('ul');
                if (!jUL.length) {
                    throw new Error("DropDownMenu:: Element '" + this._parameters.ulElementID + "' must be a <ul> tag or contain a child <ul> tag");
                }
            }
            var ulRootLevel = new js.com.cs.v4.Controls.Common.MyUnOrderedListElem(jUL);
            var p = new js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters();
            p.dropDownMenu = this;
            p.levelIndex = 0;
            p.ulElement = ulRootLevel;
            p.dropDownMenuLevelItem = null;
            this._rootLevel = new js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel(p);
        }
        else {
            throw new Error("DropDownMenu:: Element not found '" + this._parameters.ulElementID + "'");
        }
    },
    
    _init: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenu$_init() {
        this._initMenu();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel

js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel = function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters">
    /// </param>
    /// <field name="_items$1" type="Array" elementType="DropDownMenuLevelItem">
    /// </field>
    /// <field name="_ulElement$1" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="_parameters$1" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters">
    /// </field>
    /// <field name="_currentOpenSubLevel$1" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem">
    /// </field>
    this._items$1 = [];
    js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel.initializeBase(this);
    this._parameters$1 = parameters;
    this._ulElement$1 = this._parameters$1.ulElement;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init$1));
}
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel.prototype = {
    _ulElement$1: null,
    _parameters$1: null,
    _currentOpenSubLevel$1: null,
    
    get_parameters: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$get_parameters() {
        /// <value type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters"></value>
        return this._parameters$1;
    },
    
    _hideInitially$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_hideInitially$1() {
        if (this._parameters$1.levelIndex > 0) {
            if (this._parameters$1.dropDownMenu.get_parameters().animationType === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.opacityFade) {
                this._ulElement$1.get_jQueryElement().fadeOut(0);
            }
            else if (this._parameters$1.dropDownMenu.get_parameters().animationType === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.slide) {
                this._ulElement$1.get_jQueryElement().slideToggle(0);
            }
            else {
                this._ulElement$1.hide();
            }
        }
    },
    
    _initLevelItems$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_initLevelItems$1() {
        var liElems = this._ulElement$1.get_jQueryElement().children('li');
        for (var i = 0; i < liElems.length; i++) {
            var liElem = liElems.eq(i);
            var li = new js.com.cs.v4.Controls.Common.MyListItemElem(liElem);
            var levelParams = new js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters();
            levelParams.liElement = li;
            levelParams.dropDownMenuLevel = this;
            levelParams.dropDownMenu = this._parameters$1.dropDownMenu;
            var levelItem = new js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem(levelParams);
            this._items$1[this._items$1.length] = levelItem;
            levelItem.add_onShowChildLevel(ss.Delegate.create(this, this._levelItem_OnShowChildLevel$1));
            levelItem.add_onHideChildLevel(ss.Delegate.create(this, this._levelItem_OnHideChildLevel$1));
        }
    },
    
    _levelItem_OnHideChildLevel$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_levelItem_OnHideChildLevel$1(sender) {
        /// <param name="sender" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem">
        /// </param>
        if (this._currentOpenSubLevel$1 === sender) {
            this._currentOpenSubLevel$1 = null;
        }
    },
    
    _levelItem_OnShowChildLevel$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_levelItem_OnShowChildLevel$1(sender) {
        /// <param name="sender" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem">
        /// </param>
        if (this._currentOpenSubLevel$1 !== sender) {
            if (this._currentOpenSubLevel$1 != null) {
                this._currentOpenSubLevel$1.hideSubLevel();
            }
            this._currentOpenSubLevel$1 = sender;
        }
    },
    
    _init$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_init$1() {
        this._initLevelItems$1();
        this._hideInitially$1();
    },
    
    _getPositionOnTop$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnTop$1() {
        /// <returns type="Number" integer="true"></returns>
        var pos = -(this._ulElement$1.get_jQueryElement().innerHeight() + parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('marginTop')) + parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('borderTopWidth')));
        return pos;
    },
    
    _getPositionOnTopHorizAlignRight$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnTopHorizAlignRight$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.top = this._getPositionOnTop$1();
        pos.left = this._getAlignRightLeftPosition$1();
        return pos;
    },
    
    _getPositionOnTopHorizAlignLeft$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnTopHorizAlignLeft$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.top = this._getPositionOnTop$1();
        pos.left = 0;
        return pos;
    },
    
    _getPositionOnTopHorizAlignCenter$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnTopHorizAlignCenter$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.top = this._getPositionOnTop$1();
        pos.left = this._getAlignCenterLeftPosition$1();
        return pos;
    },
    
    _getPositionOnLeft$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnLeft$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.left = -(this._ulElement$1.get_jQueryElement().innerWidth() + parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('marginLeft')) + parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('borderLeftWidth')));
        pos.top = 0;
        return pos;
    },
    
    _getPositionOnRight$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnRight$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        var marginRight = parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('marginRight'));
        var borderRightWidth = parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('borderRightWidth'));
        if (isNaN(marginRight)) {
            marginRight = 0;
        }
        if (isNaN(borderRightWidth)) {
            borderRightWidth = 0;
        }
        pos.left = this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().innerWidth() + marginRight + borderRightWidth;
        pos.top = 0;
        return pos;
    },
    
    _getAlignCenterLeftPosition$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getAlignCenterLeftPosition$1() {
        /// <returns type="Number" integer="true"></returns>
        return -(this._ulElement$1.get_jQueryElement().outerWidth(false) - this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().outerWidth(false)) / 2;
    },
    
    _getAlignRightLeftPosition$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getAlignRightLeftPosition$1() {
        /// <returns type="Number" integer="true"></returns>
        return -(this._ulElement$1.get_jQueryElement().outerWidth(false) - this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().outerWidth(false));
    },
    
    _getPositionOnBottomHorizAlignRight$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnBottomHorizAlignRight$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.top = this._getPositionOnBottom$1();
        pos.left = this._getAlignRightLeftPosition$1();
        return pos;
    },
    
    _getPositionOnBottomHorizAlignLeft$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnBottomHorizAlignLeft$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.top = this._getPositionOnBottom$1();
        pos.left = 0;
        return pos;
    },
    
    _getPositionOnBottomHorizAlignCenter$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnBottomHorizAlignCenter$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = {};
        pos.top = this._getPositionOnBottom$1();
        pos.left = this._getAlignCenterLeftPosition$1();
        return pos;
    },
    
    _getPositionOnBottom$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_getPositionOnBottom$1() {
        /// <returns type="Number" integer="true"></returns>
        var marginBottom = parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('marginBottom'));
        var borderBottomWidth = parseInt(this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('borderBottomWidth'));
        if (isNaN(marginBottom)) {
            marginBottom = 0;
        }
        if (isNaN(borderBottomWidth)) {
            borderBottomWidth = 0;
        }
        var pos = this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().innerHeight() + marginBottom + borderBottomWidth;
        return pos;
    },
    
    _updatePosition$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_updatePosition$1(pos) {
        /// <param name="pos" type="js.com.JQueryScriptSharpV2._Position">
        /// </param>
        this._ulElement$1.get_jQueryElement().css('top', pos.top + 'px');
        this._ulElement$1.get_jQueryElement().css('left', pos.left + 'px');
    },
    
    _updateLevelPositionAsFirstLevel$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_updateLevelPositionAsFirstLevel$1() {
        var pos = null;
        switch (this._parameters$1.dropDownMenu.get_parameters().initialOpenPos) {
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.bottomHorizAlignCenter:
                pos = this._getPositionOnBottomHorizAlignCenter$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.bottomHorizAlignLeft:
                pos = this._getPositionOnBottomHorizAlignLeft$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.bottomHorizAlignRight:
                pos = this._getPositionOnBottomHorizAlignRight$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.topHorizAlignCenter:
                pos = this._getPositionOnTopHorizAlignCenter$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.topHorizAlignLeft:
                pos = this._getPositionOnTopHorizAlignLeft$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.topHorizAlignRight:
                pos = this._getPositionOnTopHorizAlignRight$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.right:
                pos = this._getPositionOnRight$1();
                break;
            case js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS.left:
                pos = this._getPositionOnLeft$1();
                break;
        }
        this._updatePosition$1(pos);
    },
    
    _checkFitsOnRight$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_checkFitsOnRight$1() {
        /// <returns type="Boolean"></returns>
        var rightPos = this._getPositionOnRight$1();
        this._updatePosition$1(rightPos);
        var rightPosGlobal = this._ulElement$1.get_jQueryElement().offset();
        var vw = js.com.cs.v4.Util.WindowUtil.getViewportWidth();
        var elemWidth = this._ulElement$1.get_jQueryElement().innerWidth();
        if (rightPosGlobal.left + elemWidth <= vw) {
            return true;
        }
        else {
            return false;
        }
    },
    
    _updateLevelPositionAsOtherLevels$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_updateLevelPositionAsOtherLevels$1() {
        var pos = null;
        if (this._parameters$1.dropDownMenu.get_parameters().continuationOpenPos === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS.right && this._checkFitsOnRight$1()) {
            pos = this._getPositionOnRight$1();
        }
        else {
            pos = this._getPositionOnLeft$1();
        }
        this._updatePosition$1(pos);
    },
    
    _updateLevelPositionRespectiveToParent$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_updateLevelPositionRespectiveToParent$1() {
        this._ulElement$1.get_jQueryElement().css('position', 'absolute');
        this._parameters$1.dropDownMenuLevelItem.get_liElement().get_jQueryElement().css('position', 'relative');
        if (this._parameters$1.levelIndex === 1) {
            this._updateLevelPositionAsFirstLevel$1();
        }
        else {
            this._updateLevelPositionAsOtherLevels$1();
        }
    },
    
    show: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$show() {
        this._ulElement$1.get_jQueryElement().stop(true);
        if (this._parameters$1.dropDownMenu.get_parameters().animationType === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.opacityFade) {
            this._ulElement$1.get_jQueryElement().fadeTo(this._parameters$1.dropDownMenu.get_parameters().animationDurationMS, 1);
        }
        else if (this._parameters$1.dropDownMenu.get_parameters().animationType === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.slide) {
            this._ulElement$1.get_jQueryElement().slideDown(this._parameters$1.dropDownMenu.get_parameters().animationDurationMS);
        }
        else {
            this._ulElement$1.show();
        }
        this._updateLevelPositionRespectiveToParent$1();
    },
    
    _onHideComplete$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$_onHideComplete$1() {
        this._ulElement$1.get_jQueryElement().hide();
    },
    
    hide: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevel$hide() {
        this._ulElement$1.get_jQueryElement().stop(true);
        if (this._parameters$1.dropDownMenu.get_parameters().animationType === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.opacityFade) {
            this._ulElement$1.get_jQueryElement().fadeTo(this._parameters$1.dropDownMenu.get_parameters().animationDurationMS, 0, ss.Delegate.create(this, this._onHideComplete$1));
        }
        else if (this._parameters$1.dropDownMenu.get_parameters().animationType === js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE.slide) {
            this._ulElement$1.get_jQueryElement().slideUp(this._parameters$1.dropDownMenu.get_parameters().animationDurationMS, ss.Delegate.create(this, this._onHideComplete$1));
        }
        else {
            this._ulElement$1.show();
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem

js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem = function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters">
    /// </param>
    /// <field name="__onShowChildLevel$1" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemHandler">
    /// </field>
    /// <field name="__onHideChildLevel$1" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemHandler">
    /// </field>
    /// <field name="_parameters$1" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters">
    /// </field>
    /// <field name="_hideDelayedCall$1" type="js.com.cs.v4.Time.DelayedCall">
    /// </field>
    /// <field name="_liElement$1" type="js.com.cs.v4.Controls.Common.MyListItemElem">
    /// </field>
    /// <field name="_childLevel$1" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel">
    /// </field>
    js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem.initializeBase(this);
    this._parameters$1 = parameters;
    this._liElement$1 = this._parameters$1.liElement;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init$1));
}
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem.prototype = {
    
    add_onShowChildLevel: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$add_onShowChildLevel(value) {
        /// <param name="value" type="Function" />
        this.__onShowChildLevel$1 = ss.Delegate.combine(this.__onShowChildLevel$1, value);
    },
    remove_onShowChildLevel: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$remove_onShowChildLevel(value) {
        /// <param name="value" type="Function" />
        this.__onShowChildLevel$1 = ss.Delegate.remove(this.__onShowChildLevel$1, value);
    },
    
    __onShowChildLevel$1: null,
    
    add_onHideChildLevel: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$add_onHideChildLevel(value) {
        /// <param name="value" type="Function" />
        this.__onHideChildLevel$1 = ss.Delegate.combine(this.__onHideChildLevel$1, value);
    },
    remove_onHideChildLevel: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$remove_onHideChildLevel(value) {
        /// <param name="value" type="Function" />
        this.__onHideChildLevel$1 = ss.Delegate.remove(this.__onHideChildLevel$1, value);
    },
    
    __onHideChildLevel$1: null,
    _parameters$1: null,
    _hideDelayedCall$1: null,
    _liElement$1: null,
    
    get_liElement: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$get_liElement() {
        /// <value type="js.com.cs.v4.Controls.Common.MyListItemElem"></value>
        return this._liElement$1;
    },
    
    _childLevel$1: null,
    
    _initChildLevel$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_initChildLevel$1() {
        var childUL = this._liElement$1.get_jQueryElement().children('ul');
        if (childUL.length > 0) {
            var childLevelParams = new js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters();
            childLevelParams.dropDownMenu = this._parameters$1.dropDownMenu;
            childLevelParams.levelIndex = this._parameters$1.dropDownMenuLevel.get_parameters().levelIndex + 1;
            childLevelParams.ulElement = new js.com.cs.v4.Controls.Common.MyUnOrderedListElem(childUL);
            childLevelParams.dropDownMenuLevelItem = this;
            this._childLevel$1 = new js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel(childLevelParams);
            this._initHandlers$1();
            this._hideDelayedCall$1 = new js.com.cs.v4.Time.DelayedCall(ss.Delegate.create(this, this._hideSubLevel$1), this._parameters$1.dropDownMenu.get_parameters().hideDelayMS);
        }
    },
    
    _initHandlers$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_initHandlers$1() {
        this._liElement$1.add_onMouseEnter(ss.Delegate.create(this, this._liElement_onMouseEnter$1));
        this._liElement$1.add_onMouseLeave(ss.Delegate.create(this, this._liElement_onMouseLeave$1));
    },
    
    _liElement_onMouseLeave$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_liElement_onMouseLeave$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._hideDelayedCall$1.set_delayMS(this._parameters$1.dropDownMenu.get_parameters().hideDelayMS);
        this._hideDelayedCall$1.cancel();
        this._hideDelayedCall$1.invoke();
    },
    
    _liElement_onMouseEnter$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_liElement_onMouseEnter$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._showSubLevel$1();
    },
    
    _init$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_init$1() {
        this._initChildLevel$1();
    },
    
    _showSubLevel$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_showSubLevel$1() {
        this._liElement$1.addClass('hovered');
        this._hideDelayedCall$1.cancel();
        this._childLevel$1.show();
        if (this.__onShowChildLevel$1 != null) {
            this.__onShowChildLevel$1(this);
        }
        if (this._parameters$1.dropDownMenu.get_parameters().enableCufonRefresh) {
            this._resetCufon$1();
        }
    },
    
    _resetCufon$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_resetCufon$1() {
        var className = this._parameters$1.dropDownMenu.get_parameters().menuButtonClassNameForCufonRefresh;
        if (String.isNullOrEmpty(className)) {
            Cufon.refresh();
        }
        else {
            Cufon.refresh('.' + className);
        }
    },
    
    _hideSubLevel$1: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$_hideSubLevel$1() {
        this._hideDelayedCall$1.cancel();
        this._childLevel$1.hide();
        if (this.__onHideChildLevel$1 != null) {
            this.__onHideChildLevel$1(this);
        }
        this._liElement$1.removeClass('hovered');
        if (this._parameters$1.dropDownMenu.get_parameters().enableCufonRefresh) {
            this._resetCufon$1();
        }
    },
    
    hideSubLevel: function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItem$hideSubLevel() {
        this._hideSubLevel$1();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters

js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters = function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelItemParameters() {
    /// <field name="dropDownMenuLevel" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel">
    /// </field>
    /// <field name="liElement" type="js.com.cs.v4.Controls.Common.MyListItemElem">
    /// </field>
    /// <field name="dropDownMenu" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu">
    /// </field>
}
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters.prototype = {
    dropDownMenuLevel: null,
    liElement: null,
    dropDownMenu: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters

js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters = function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuLevelParameters() {
    /// <field name="ulElement" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="dropDownMenu" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu">
    /// </field>
    /// <field name="dropDownMenuLevelItem" type="js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem">
    /// </field>
}
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters.prototype = {
    ulElement: null,
    levelIndex: 0,
    dropDownMenu: null,
    dropDownMenuLevelItem: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters

js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters = function js_com_cs_v4_UI_DropDownMenu_v1_DropDownMenuParameters() {
    /// <field name="ulElementID" type="String">
    /// </field>
    /// <field name="initialOpenPos" type="js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_INITIAL_OPEN_POS">
    /// </field>
    /// <field name="continuationOpenPos" type="js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_CONTINUATION_OPEN_POS">
    /// </field>
    /// <field name="animationType" type="js.com.cs.v4.UI.DropDownMenu.v1.DROP_DOWN_MENU_SHOW_HIDE_ANIMATION_TYPE">
    /// </field>
    /// <field name="animationDurationMS" type="Number" integer="true">
    /// </field>
    /// <field name="hideDelayMS" type="Number" integer="true">
    /// </field>
    /// <field name="enableCufonRefresh" type="Boolean">
    /// </field>
    /// <field name="menuButtonClassNameForCufonRefresh" type="String">
    /// </field>
}
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters.prototype = {
    ulElementID: null,
    initialOpenPos: 0,
    continuationOpenPos: 0,
    animationType: 0,
    animationDurationMS: 0,
    hideDelayMS: 0,
    enableCufonRefresh: false,
    menuButtonClassNameForCufonRefresh: null
}


Type.registerNamespace('js.com.cs.v4.UI.ExpandableTree');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.ExpandableTree.ExpandableTree

js.com.cs.v4.UI.ExpandableTree.ExpandableTree = function js_com_cs_v4_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.v4.UI.ExpandableTree.ExpandableTreeSettings">
    /// </param>
    /// <param name="allowMultipleOpen" type="Boolean">
    /// </param>
    /// <param name="initOnReadyCallback" type="Boolean">
    /// </param>
    /// <field name="_clickedLevel" type="js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel">
    /// </field>
    /// <field name="_rootLevel" type="js.com.cs.v4.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.v4.UI.ExpandableTree.ExpandableTreeSettings">
    /// </field>
    if (settings == null) {
        settings = new js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings();
    }
    this._settings = settings;
    this._allowMultipleOpen = allowMultipleOpen;
    this._rootLevelNode = rootLevelNode;
    if (initOnReadyCallback) {
        js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
    }
    else {
        this._init();
    }
}
js.com.cs.v4.UI.ExpandableTree.ExpandableTree.prototype = {
    _clickedLevel: null,
    _rootLevel: null,
    _rootLevelNode: null,
    _allowMultipleOpen: false,
    _settings: null,
    
    _init: function js_com_cs_v4_UI_ExpandableTree_ExpandableTree$_init() {
        this._rootLevel = new js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel(new js.com.cs.v4.Controls.Common.MyElement(this._rootLevelNode), null, this._settings);
        this._rootLevel.add_onClick(ss.Delegate.create(this, this._rootLevel_OnClick));
    },
    
    _rootLevel_OnClick: function js_com_cs_v4_UI_ExpandableTree_ExpandableTree$_rootLevel_OnClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.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.v4.UI.ExpandableTree.ExpandableTreeLevel

js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel = function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel(levelElement, parentLevel, settings) {
    /// <param name="levelElement" type="js.com.cs.v4.Controls.Common.MyElement">
    /// 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.v4.UI.ExpandableTree.ExpandableTreeLevel">
    /// </param>
    /// <param name="settings" type="js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings">
    /// </param>
    /// <field name="__onClick" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    /// <field name="_childLevels" type="Array" elementType="ExpandableTreeLevel">
    /// </field>
    /// <field name="_aLink" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_levelElement" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_ulChildLevels" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="_href" type="String">
    /// </field>
    /// <field name="_open" type="Boolean">
    /// </field>
    /// <field name="_settings" type="js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v4.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.v4.UI.ExpandableTree.ExpandableTreeLevel.prototype = {
    
    add_onClick: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$add_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick = ss.Delegate.combine(this.__onClick, value);
    },
    remove_onClick: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick = ss.Delegate.remove(this.__onClick, value);
    },
    
    __onClick: null,
    
    get_isSelected: function js_com_cs_v4_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_v4_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_v4_UI_ExpandableTree_ExpandableTreeLevel$get_parent() {
        /// <value type="js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel"></value>
        return this._parent;
    },
    
    _init: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$_init() {
        var ulChildLevels = js.com.JQueryScriptSharpV2.jQueryUtil.select('ul', this._levelElement.get_jQueryElement());
        if (ulChildLevels.length > 0) {
            this._ulChildLevels = new js.com.cs.v4.Controls.Common.MyUnOrderedListElem(ulChildLevels.eq(0));
            this._parseChildLinks();
        }
        var aHref = js.com.JQueryScriptSharpV2.jQueryUtil.select('a', this._levelElement.get_jQueryElement());
        if (aHref.length > 0) {
            this._aLink = new js.com.cs.v4.Controls.Common.MyAnchorElement(aHref.eq(0));
            this._initialText = this._aLink.get_innerHTML();
            if (this._aLink.get_parent().get_element() === this._levelElement.get_element()) {
                if (!String.isNullOrEmpty(this._aLink.get_jQueryElement().attr('href'))) {
                    this._href = this._aLink.get_href();
                    if (this._childLevels.length > 0) {
                        this._aLink.get_element().attributes.removeNamedItem('href');
                    }
                }
                this._aLink.add_onClick(ss.Delegate.create(this, this._aLink_onClick));
                if (js.com.cs.v4.Util.GeneralUtil.isIE6()) {
                    this._aLink.add_onMouseEnter(ss.Delegate.create(this, this._aLink_onMouseEnter));
                    this._aLink.add_onMouseLeave(ss.Delegate.create(this, this._aLink_onMouseLeave));
                }
            }
            else {
                this._aLink = null;
                this._initialText = this._levelElement.get_innerHTML();
            }
        }
        this._openOrHideInitially();
    },
    
    _updateText: function js_com_cs_v4_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_v4_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_v4_UI_ExpandableTree_ExpandableTreeLevel$_aLink_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._aLink.removeClass('over');
    },
    
    _aLink_onMouseEnter: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$_aLink_onMouseEnter(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._aLink.addClass('over');
    },
    
    _aLink_onClick: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$_aLink_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._open && this._settings.linksWithChildrenClickable && !String.isNullOrEmpty(this._href)) {
            js.com.cs.v4.Util.WindowUtil.changeLocation(this._href);
        }
        else {
            if (this.__onClick != null) {
                e.data = this;
                this.__onClick(e);
            }
        }
    },
    
    _parseChildLinks: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$_parseChildLinks() {
        for (var i = 0; i < this._ulChildLevels.get_element().childNodes.length; i++) {
            var childLevelElement = new js.com.cs.v4.Controls.Common.MyElement(this._ulChildLevels.get_element().childNodes[i]);
            var childLevel = new js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel(childLevelElement, this, this._settings);
            childLevel.add_onClick(ss.Delegate.create(this, this._childLevel_OnClick));
            this._childLevels[this._childLevels.length] = childLevel;
        }
    },
    
    _childLevel_OnClick: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$_childLevel_OnClick(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.__onClick(e);
    },
    
    get_title: function js_com_cs_v4_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_v4_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_v4_UI_ExpandableTree_ExpandableTreeLevel$hasParent(level) {
        /// <param name="level" type="js.com.cs.v4.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_v4_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_v4_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_v4_UI_ExpandableTree_ExpandableTreeLevel$toggle() {
        if (this._open) {
            this.close(true);
        }
        else {
            this.open();
        }
    },
    
    closeUpTillSiblingLevel: function js_com_cs_v4_UI_ExpandableTree_ExpandableTreeLevel$closeUpTillSiblingLevel(sibling) {
        /// <param name="sibling" type="js.com.cs.v4.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_v4_UI_ExpandableTree_ExpandableTreeLevel$isSibling(level) {
        /// <param name="level" type="js.com.cs.v4.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_v4_UI_ExpandableTree_ExpandableTreeLevel$get_isOpened() {
        /// <value type="Boolean"></value>
        return this._open;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings

js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings = function js_com_cs_v4_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 (ss.isNullOrUndefined(animationDurationMS)) {
        animationDurationMS = 250;
    }
    if (ss.isNullOrUndefined(this.linksWithChildrenClickable)) {
        this.linksWithChildrenClickable = true;
    }
    this.animationDurationMS = animationDurationMS;
    this.linksWithChildrenClickable = linksWithChildrenClickable;
    this.selectedClass = 'selected';
}
js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings.prototype = {
    animationDurationMS: 0,
    linksWithChildrenClickable: false,
    prependOpenedText: null,
    prependClosedText: null,
    cssClassOpened: 'open',
    selectedClass: null
}


Type.registerNamespace('js.com.cs.v4.UI.FLVPlayer');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.FLVPlayer.GeneralFLVPlayer

js.com.cs.v4.UI.FLVPlayer.GeneralFLVPlayer = function js_com_cs_v4_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.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divVideo" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    this.div = new js.com.cs.v4.Controls.Common.MyDivElement();
}
js.com.cs.v4.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_v4_UI_FLVPlayer_GeneralFLVPlayer$_removeCurrentDiv() {
        if (this._divVideo != null) {
            this.div.removeChild(this._divVideo);
        }
    },
    
    _createDiv: function js_com_cs_v4_UI_FLVPlayer_GeneralFLVPlayer$_createDiv(width, height) {
        /// <param name="width" type="String">
        /// </param>
        /// <param name="height" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.Controls.Common.MyDivElement"></returns>
        this._removeCurrentDiv();
        this._divVideo = new js.com.cs.v4.Controls.Common.MyDivElement();
        this.div.appendChild(this._divVideo);
        if (width.indexOf('%') === -1) {
            width = parseInt(width) + 'px';
        }
        if (height.indexOf('%') === -1) {
            height = parseInt(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.v4.UI.FLVPlayer.GeneralFLVPlayer.flvplayeR_COUNT);
        js.com.cs.v4.UI.FLVPlayer.GeneralFLVPlayer.flvplayeR_COUNT++;
        return this._divVideo;
    },
    
    _playVideo: function js_com_cs_v4_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_v4_UI_FLVPlayer_GeneralFLVPlayer$_init() {
    },
    
    play: function js_com_cs_v4_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.registerNamespace('js.com.cs.v4.UI.FLVPlayer.JWPlayer');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject

js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject = function js_com_cs_v4_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.v4.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.v4.Controls.Common.MyDivElement">
    /// </field>
    this.div = new js.com.cs.v4.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.v4.Util._SwfObjectParams();
    if (String.isNullOrEmpty(width)) {
        width = '100%';
    }
    if (String.isNullOrEmpty(height)) {
        height = '100%';
    }
    if (ss.isNullOrUndefined(jwPlayerPath)) {
        jwPlayerPath = js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.jW_PLAYER_PATH;
    }
    if (ss.isNullOrUndefined(expressInstall)) {
        expressInstall = js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.expresS_INSTALL_PATH;
    }
    if (ss.isNullOrUndefined(flashVersion)) {
        flashVersion = js.com.cs.v4.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.v4.Controls.Common.MyDivElement();
    divFLV.set_id(elementID + '_divFLV');
    this.div.appendChild(divFLV);
    js.com.cs.v4.Util.SWFObjectUtil.initSWF(jwPlayerPath, divFLV.get_id(), flashVersion, width, height, this.parameters, null);
}
js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.prototype = {
    
    get_autoStart: function js_com_cs_v4_UI_FLVPlayer_JWPlayer_JWPlayerObject$get_autoStart() {
        /// <value type="Boolean"></value>
        return !!this.parameters.flashVars['autostart'];
    },
    set_autoStart: function js_com_cs_v4_UI_FLVPlayer_JWPlayer_JWPlayerObject$set_autoStart(value) {
        /// <value type="Boolean"></value>
        this.parameters.flashVars['autostart'] = value;
        return value;
    },
    
    parameters: null,
    div: null
}


Type.registerNamespace('js.com.cs.v4.UI.Forms');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS

js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS = function() { 
    /// <field name="none" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="alpha" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="bothLetterCase" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="numerics" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="specialCharacters" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.prototype = {
    none: 1, 
    alpha: 2, 
    bothLetterCase: 4, 
    numerics: 8, 
    specialCharacters: 16
}
js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.registerEnum('js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS', true);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.VALIDATION_STATUS

js.com.cs.v4.UI.Forms.VALIDATION_STATUS = function() { 
    /// <field name="none" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="error" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="success" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="waitingForAJAX" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.UI.Forms.VALIDATION_STATUS.prototype = {
    none: 0, 
    error: 100, 
    success: 200, 
    waitingForAJAX: 300
}
js.com.cs.v4.UI.Forms.VALIDATION_STATUS.registerEnum('js.com.cs.v4.UI.Forms.VALIDATION_STATUS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.Button

js.com.cs.v4.UI.Forms.Button = function js_com_cs_v4_UI_Forms_Button(element, parameters) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v4.UI.Forms.ButtonParams">
    /// </param>
    /// <field name="__validationSuccessful2$1" type="EventHandler">
    /// </field>
    /// <field name="_isMouseOver$1" type="Boolean">
    /// </field>
    /// <field name="myButton" type="js.com.cs.v4.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.v4.UI.Forms.Form">
    /// </field>
    /// <field name="_onClickFunction$1" type="EventHandler">
    /// </field>
    /// <field name="submitOnCtrlS" type="Boolean">
    /// </field>
    /// <field name="_buttonForAjax$1" type="Boolean">
    /// </field>
    /// <field name="_params$1" type="js.com.cs.v4.UI.Forms.ButtonParams">
    /// </field>
    /// <field name="__preValidation$1" type="js.com.cs.v4.UI.Forms.ValidationHandler">
    /// </field>
    /// <field name="_oldOnClick$1" type="Function">
    /// </field>
    /// <field name="__postValidation$1" type="js.com.cs.v4.UI.Forms.ValidationHandler">
    /// </field>
    /// <field name="_validationAndPostValidationAlreadyPerformed$1" type="Boolean">
    /// </field>
    js.com.cs.v4.UI.Forms.Button.initializeBase(this);
    this._params$1 = parameters;
    if (Type.canCast(element, String)) {
        element = js.com.JQueryScriptSharpV2.jQueryUtil.selectByIdOrElements(element).get(0);
    }
    this._buttonForAjax$1 = !ss.isNullOrUndefined(this._params$1.buttonForAjax);
    this.validateFormOnClick = this._params$1.validateFormOnClick;
    this.myButton = new js.com.cs.v4.Controls.Form.MyButton(element);
    if (this.get_id().indexOf('uploadformUploads') !== -1) {
    }
    this.validationGroup = this._params$1.validationGroup;
    this._defaultButton$1 = this._defaultButton$1;
    this._confirmMessage$1 = parameters.confirmMessage;
    this._resetOldClick$1();
    this._init$1();
}
js.com.cs.v4.UI.Forms.Button.prototype = {
    
    add_validationSuccessful2: function js_com_cs_v4_UI_Forms_Button$add_validationSuccessful2(value) {
        /// <param name="value" type="Function" />
        this.__validationSuccessful2$1 = ss.Delegate.combine(this.__validationSuccessful2$1, value);
    },
    remove_validationSuccessful2: function js_com_cs_v4_UI_Forms_Button$remove_validationSuccessful2(value) {
        /// <param name="value" type="Function" />
        this.__validationSuccessful2$1 = ss.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_v4_UI_Forms_Button$get_form() {
        /// <value type="js.com.cs.v4.UI.Forms.Form"></value>
        return this._form$1;
    },
    set_form: function js_com_cs_v4_UI_Forms_Button$set_form(value) {
        /// <value type="js.com.cs.v4.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_v4_UI_Forms_Button$get_id() {
        /// <value type="String"></value>
        return this.myButton.get_id();
    },
    
    get_enabled: function js_com_cs_v4_UI_Forms_Button$get_enabled() {
        /// <value type="Boolean"></value>
        return !this.myButton.get_disabled();
    },
    set_enabled: function js_com_cs_v4_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_v4_UI_Forms_Button$get_disabled() {
        /// <value type="Boolean"></value>
        return !this.get_enabled();
    },
    set_disabled: function js_com_cs_v4_UI_Forms_Button$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.set_enabled(!value);
        return value;
    },
    
    toString: function js_com_cs_v4_UI_Forms_Button$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Button]';
    },
    
    isDefaultButton: function js_com_cs_v4_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_v4_UI_Forms_Button$_resetOldClick$1() {
        var elem = this.myButton.get_myElement().get_element();
        var oldClickFunc = elem.onclick;
        if (Type.canCast(oldClickFunc, String)) {
            try {
                var code = oldClickFunc;
                oldClickFunc = new Function(code);
            }
            catch ($e1) {
            }
        }
        this.myButton.get_myElement().get_element().onclick = null;
        this._oldOnClick$1 = oldClickFunc;
    },
    
    _buttonForAjax$1: false,
    
    get_buttonForAjax: function js_com_cs_v4_UI_Forms_Button$get_buttonForAjax() {
        /// <value type="Boolean"></value>
        return this._buttonForAjax$1;
    },
    set_buttonForAjax: function js_com_cs_v4_UI_Forms_Button$set_buttonForAjax(value) {
        /// <value type="Boolean"></value>
        this._buttonForAjax$1 = value;
        return value;
    },
    
    _params$1: null,
    
    attachPreValidationHandler: function js_com_cs_v4_UI_Forms_Button$attachPreValidationHandler(preValidationHandler) {
        /// <param name="preValidationHandler" type="Function">
        /// </param>
    },
    
    add_preValidation: function js_com_cs_v4_UI_Forms_Button$add_preValidation(value) {
        /// <param name="value" type="Function" />
        this.__preValidation$1 = ss.Delegate.combine(this.__preValidation$1, value);
    },
    remove_preValidation: function js_com_cs_v4_UI_Forms_Button$remove_preValidation(value) {
        /// <param name="value" type="Function" />
        this.__preValidation$1 = ss.Delegate.remove(this.__preValidation$1, value);
    },
    
    __preValidation$1: null,
    _oldOnClick$1: null,
    
    add_postValidation: function js_com_cs_v4_UI_Forms_Button$add_postValidation(value) {
        /// <param name="value" type="Function" />
        this.__postValidation$1 = ss.Delegate.combine(this.__postValidation$1, value);
    },
    remove_postValidation: function js_com_cs_v4_UI_Forms_Button$remove_postValidation(value) {
        /// <param name="value" type="Function" />
        this.__postValidation$1 = ss.Delegate.remove(this.__postValidation$1, value);
    },
    
    __postValidation$1: null,
    _validationAndPostValidationAlreadyPerformed$1: false,
    
    _btnMouseDown$1: function js_com_cs_v4_UI_Forms_Button$_btnMouseDown$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        js.com.cs.v4.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().currentForm = this.get_form();
    },
    
    _btnFocus$1: function js_com_cs_v4_UI_Forms_Button$_btnFocus$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().currentForm = this.get_form();
    },
    
    performValidationAndPostValidation2: function js_com_cs_v4_UI_Forms_Button$performValidationAndPostValidation2() {
        /// <returns type="Boolean"></returns>
        if (!this._validationAndPostValidationAlreadyPerformed$1) {
            this._validationAndPostValidationAlreadyPerformed$1 = true;
            var ok = true;
            ok = (!js.com.cs.v4.UI.Forms.FormsCollection.get_instance().validateCurrentForm().length);
            if (ok && this.__postValidation$1 != null) {
                ok = this.__postValidation$1(this);
            }
            if (ok && !ss.isNullOrUndefined(this._confirmMessage$1)) {
                if (!confirm(this._confirmMessage$1)) {
                    return false;
                }
            }
            if (ok && this.__validationSuccessful2$1 != null) {
                this.__validationSuccessful2$1(this, null);
            }
            return ok;
        }
        return false;
    },
    
    _askConfirmMessage$1: function js_com_cs_v4_UI_Forms_Button$_askConfirmMessage$1() {
        /// <returns type="Boolean"></returns>
        if (!ss.isNullOrUndefined(this._confirmMessage$1)) {
            if (!confirm(this._confirmMessage$1)) {
                return false;
            }
        }
        return true;
    },
    
    _btnClick$1: function js_com_cs_v4_UI_Forms_Button$_btnClick$1(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.validateFormOnClick) {
            this._validationAndPostValidationAlreadyPerformed$1 = false;
            js.com.cs.v4.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
            js.com.cs.v4.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(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_myElement().get_element());
                }
                if (!isASPNetButton) {
                    if (this.submitOnClick) {
                        ok = this.get_form().submit(false, false);
                    }
                    else {
                        var errs = this.get_form().validate();
                        ok = errs == null || !errs.length;
                    }
                }
            }
            js.com.cs.v4.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
        }
    },
    
    _getBaseCSSClass$1: function js_com_cs_v4_UI_Forms_Button$_getBaseCSSClass$1() {
        /// <returns type="String"></returns>
        var baseCSS = (this._params$1.isLinkButton) ? js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance().cssClassLinkButton : js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance().cssClassButton;
        return baseCSS;
    },
    
    _updateCSS$1: function js_com_cs_v4_UI_Forms_Button$_updateCSS$1() {
        var baseCSS = this._getBaseCSSClass$1();
        this.myButton.toggleClass(baseCSS + '-' + js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance().cssClassOver, this._isMouseOver$1);
        this.myButton.toggleClass(baseCSS + '-' + js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance().cssClassDisabled, this.get_disabled());
    },
    
    _initHandlers$1: function js_com_cs_v4_UI_Forms_Button$_initHandlers$1() {
        this.myButton.addClass(this._getBaseCSSClass$1());
        this._onClickFunction$1 = this.myButton.get_myElement().get_element().onclick;
        this.myButton.add_onMouseDown(ss.Delegate.create(this, this._btnMouseDown$1));
        this.myButton.add_onFocus(ss.Delegate.create(this, this._btnFocus$1));
        this.myButton.add_onClick(ss.Delegate.create(this, this._btnClick$1));
        this.myButton.add_onMouseEnter(ss.Delegate.create(this, this._myButton_onMouseEnter$1));
        this.myButton.add_onMouseOver(ss.Delegate.create(this, this._myButton_onMouseOver$1));
        this.myButton.add_onMouseOut(ss.Delegate.create(this, this._myButton_onMouseOut$1));
    },
    
    _myButton_onMouseEnter$1: function js_com_cs_v4_UI_Forms_Button$_myButton_onMouseEnter$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
    },
    
    _myButton_onMouseOut$1: function js_com_cs_v4_UI_Forms_Button$_myButton_onMouseOut$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._isMouseOver$1 = false;
        this._updateCSS$1();
    },
    
    _myButton_onMouseOver$1: function js_com_cs_v4_UI_Forms_Button$_myButton_onMouseOver$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._isMouseOver$1 = true;
        this._updateCSS$1();
    },
    
    _initButtonWithForm$1: function js_com_cs_v4_UI_Forms_Button$_initButtonWithForm$1() {
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().addButton(this);
    },
    
    _init$1: function js_com_cs_v4_UI_Forms_Button$_init$1() {
        this._initButtonWithForm$1();
        this._initHandlers$1();
    },
    
    get_defaultButton: function js_com_cs_v4_UI_Forms_Button$get_defaultButton() {
        /// <value type="Boolean"></value>
        return this._defaultButton$1;
    },
    set_defaultButton: function js_com_cs_v4_UI_Forms_Button$set_defaultButton(value) {
        /// <value type="Boolean"></value>
        this._defaultButton$1 = value;
        return value;
    },
    
    destroy: function js_com_cs_v4_UI_Forms_Button$destroy() {
        if (this.myButton != null) {
            this.myButton.destroy();
        }
        js.com.cs.v4.UI.Forms.Button.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.CheckBoxListRequired

js.com.cs.v4.UI.Forms.CheckBoxListRequired = function js_com_cs_v4_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.v4.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.v4.Controls.Form.MyTextBoxHidden(hiddenFieldID);
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.Forms.CheckBoxListRequired.prototype = {
    _checkboxListId: null,
    _hiddenField: null,
    _checkboxes: null,
    
    _chkChange: function js_com_cs_v4_UI_Forms_CheckBoxListRequired$_chkChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.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_v4_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.v4.Controls.Form.MyCheckBox(domElem);
                this._checkboxes[this._checkboxes.length] = chk;
                chk.add_onChange(ss.Delegate.create(this, this._chkChange));
                chk.add_onMouseUp(ss.Delegate.create(this, this._chkChange));
                chk.add_onKeyUp(ss.Delegate.create(this, this._chkChange));
                i++;
            }
        } while (domElem != null);
    },
    
    _init: function js_com_cs_v4_UI_Forms_CheckBoxListRequired$_init() {
        this._initCheckBoxes();
        this._chkChange(null);
    },
    
    _update: function js_com_cs_v4_UI_Forms_CheckBoxListRequired$_update() {
        this._chkChange(null);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.ButtonParams

js.com.cs.v4.UI.Forms.ButtonParams = function js_com_cs_v4_UI_Forms_ButtonParams() {
    /// <field name="validateFormOnClick" type="Boolean">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="defaultButton" type="Boolean">
    /// </field>
    /// <field name="confirmMessage" type="String">
    /// </field>
    /// <field name="isLinkButton" type="Boolean">
    /// </field>
    /// <field name="buttonForAjax" type="Boolean">
    /// </field>
}
js.com.cs.v4.UI.Forms.ButtonParams.prototype = {
    validateFormOnClick: false,
    validationGroup: null,
    defaultButton: false,
    confirmMessage: null,
    isLinkButton: false,
    buttonForAjax: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword

js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword = function js_com_cs_v4_UI_Forms_FormFieldValidationParamsPassword() {
    /// <field name="showPasswordStrength" type="Boolean">
    /// </field>
    /// <field name="passwordStrengthType" type="js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS">
    /// </field>
    /// <field name="passwordCannotBeLikeFieldID" type="String">
    /// </field>
    /// <field name="passwordCannotBeLikeFieldErrorMsg" type="String">
    /// </field>
    js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword.initializeBase(this);
}
js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword.prototype = {
    showPasswordStrength: false,
    passwordStrengthType: 0,
    passwordCannotBeLikeFieldID: null,
    passwordCannotBeLikeFieldErrorMsg: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldPassword

js.com.cs.v4.UI.Forms.FieldPassword = function js_com_cs_v4_UI_Forms_FieldPassword(element, title, validationParams, customCSSClasses, parameters) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v4.UI.Forms.FieldDate3CombosParams">
    /// </param>
    /// <field name="_parameters$5" type="js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword">
    /// </field>
    /// <field name="_txtCantBeLikeField$5" type="js.com.cs.v4.Controls.Form.MyTextBoxSingleLine">
    /// </field>
    /// <field name="_passStrength$5" type="js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldPassword.initializeBase(this, [ element, title, validationParams, customCSSClasses ]);
    this._parameters$5 = validationParams;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init$5));
}
js.com.cs.v4.UI.Forms.FieldPassword.prototype = {
    _parameters$5: null,
    _txtCantBeLikeField$5: null,
    _passStrength$5: null,
    
    _initFieldComparison$5: function js_com_cs_v4_UI_Forms_FieldPassword$_initFieldComparison$5() {
        if (this._parameters$5.passwordCannotBeLikeFieldID != null) {
            this._txtCantBeLikeField$5 = new js.com.cs.v4.Controls.Form.MyTextBoxSingleLine(this._parameters$5.passwordCannotBeLikeFieldID);
        }
    },
    
    _initPasswordStrengthHandler$5: function js_com_cs_v4_UI_Forms_FieldPassword$_initPasswordStrengthHandler$5() {
        if (this._parameters$5.showPasswordStrength) {
            var opts = new js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters();
            opts.minLength = this._parameters$5.minLength;
            this._passStrength$5 = new js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker(opts);
            this.get_element().get_jQueryElement().after(this._passStrength$5.get_jQueryElement());
            this.get_formElement().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._formElement_OnChangeEvenWithKeys$5));
        }
    },
    
    _updatePasswordStrength$5: function js_com_cs_v4_UI_Forms_FieldPassword$_updatePasswordStrength$5() {
        if (this._passStrength$5 != null) {
            this._passStrength$5.checkPasswordStrength(Type.safeCast(this.get_valueObject(), String));
        }
    },
    
    _formElement_OnChangeEvenWithKeys$5: function js_com_cs_v4_UI_Forms_FieldPassword$_formElement_OnChangeEvenWithKeys$5(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._updatePasswordStrength$5();
    },
    
    _checkPasswordNotLikeField$5: function js_com_cs_v4_UI_Forms_FieldPassword$_checkPasswordNotLikeField$5() {
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        if (this._txtCantBeLikeField$5 != null) {
            var pass = Type.safeCast(this.getValueObject(), String);
            var likeFieldValue = this._txtCantBeLikeField$5.get_value();
            if (!String.isNullOrEmpty(pass) && !String.isNullOrEmpty(likeFieldValue) && pass === likeFieldValue) {
                return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error, this._parameters$5.passwordCannotBeLikeFieldErrorMsg);
            }
        }
        return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
    },
    
    _checkPasswordRequiredStrength$5: function js_com_cs_v4_UI_Forms_FieldPassword$_checkPasswordRequiredStrength$5() {
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        var pass = Type.safeCast(this.getValueObject(), String);
        var errMsg = null;
        if (!String.isNullOrEmpty(pass)) {
            var strength = js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker.getPasswordStrength(pass);
            if (errMsg == null && js.com.cs.v4.Util.NumberUtil.bitwiseComparison(this._parameters$5.passwordStrengthType, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.alpha) && !js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.alpha)) {
                errMsg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().passwordMustIncludeAlphabeticalCharacters;
            }
            if (errMsg == null && js.com.cs.v4.Util.NumberUtil.bitwiseComparison(this._parameters$5.passwordStrengthType, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.bothLetterCase) && !js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.bothLetterCase)) {
                errMsg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().passwordMustIncludeBothLowerAndUpperCase;
            }
            if (errMsg == null && js.com.cs.v4.Util.NumberUtil.bitwiseComparison(this._parameters$5.passwordStrengthType, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.numerics) && !js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.numerics)) {
                errMsg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().passwordMustIncludeAtLeastOneNumber;
            }
            if (errMsg == null && js.com.cs.v4.Util.NumberUtil.bitwiseComparison(this._parameters$5.passwordStrengthType, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.specialCharacters) && !js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.specialCharacters)) {
                errMsg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().passwordMustIncludeASpecialCharacter;
            }
        }
        if (errMsg == null) {
            return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
        }
        else {
            return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error, errMsg);
        }
    },
    
    validate: function js_com_cs_v4_UI_Forms_FieldPassword$validate(showError, validateSubGroupsAlso, callAjaxCustomValidation) {
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <param name="validateSubGroupsAlso" type="Boolean">
        /// </param>
        /// <param name="callAjaxCustomValidation" type="Boolean">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        var result = new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
        result = this._checkPasswordNotLikeField$5();
        if (result.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success && this._parameters$5.passwordStrengthType !== js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.none) {
            result = this._checkPasswordRequiredStrength$5();
        }
        if (showError) {
            this.set_fieldValidationStatus(result);
            if (result != null && result.isError()) {
                this.showValidationErrorAndHide();
            }
        }
        if (result.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success) {
            result = js.com.cs.v4.UI.Forms.FieldPassword.callBaseMethod(this, 'validate', [ showError, validateSubGroupsAlso, callAjaxCustomValidation ]);
        }
        return result;
    },
    
    _init$5: function js_com_cs_v4_UI_Forms_FieldPassword$_init$5() {
        this._initFieldComparison$5();
        this._initPasswordStrengthHandler$5();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker

js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker = function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarker(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters">
    /// </param>
    /// <field name="_divPercentageBar$2" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divText$2" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_parameters$2" type="js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters">
    /// </field>
    /// <field name="_csS_CLASS$2" type="String" static="true">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker.initializeBase(this);
    this._parameters$2 = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init$2));
}
js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker.getPasswordStrength = function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarker$getPasswordStrength(password) {
    /// <param name="password" type="String">
    /// </param>
    /// <returns type="js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS"></returns>
    var containsLowers = new RegExp('[a-z]', 'g').test(password);
    var containsUppers = new RegExp('[A-Z]', 'g').test(password);
    var containsNumerics = new RegExp('[\\d]', 'g').test(password);
    var containsSpecials = new RegExp('[^A-Za-z\\d]', 'g').test(password);
    var strength = js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.none;
    if (containsLowers || containsUppers) {
        strength = strength | js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.alpha;
    }
    if (containsLowers && containsUppers) {
        strength = strength | js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.bothLetterCase;
    }
    if (containsNumerics) {
        strength = strength | js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.numerics;
    }
    if (containsSpecials) {
        strength = strength | js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.specialCharacters;
    }
    return strength;
}
js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker.prototype = {
    _divPercentageBar$2: null,
    _divText$2: null,
    _parameters$2: null,
    
    _initControl$2: function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarker$_initControl$2() {
        this.addClass(js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker._csS_CLASS$2);
        this._divPercentageBar$2 = new js.com.cs.v4.Controls.Common.MyDivElement(js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<div class='password-strength-meter-bar' />"));
        this._divText$2 = new js.com.cs.v4.Controls.Common.MyDivElement(js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<div class='password-strength-meter-text' />"));
        this.appendChild(this._divPercentageBar$2);
        this.appendChild(this._divText$2);
    },
    
    _init$2: function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarker$_init$2() {
        this._initControl$2();
    },
    
    _updateBarAndText$2: function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarker$_updateBarAndText$2(strength, exceedsMinLength) {
        /// <param name="strength" type="js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS">
        /// </param>
        /// <param name="exceedsMinLength" type="Boolean">
        /// </param>
        var strengthLevel = 0;
        if (strength !== js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.none) {
            strengthLevel = 1;
        }
        if (exceedsMinLength) {
            if (js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.bothLetterCase)) {
                strengthLevel++;
            }
            if (js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.numerics)) {
                strengthLevel++;
            }
            if (js.com.cs.v4.Util.NumberUtil.bitwiseComparison(strength, js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS.specialCharacters)) {
                strengthLevel++;
            }
        }
        this.set_cssClass(js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker._csS_CLASS$2 + ' ' + 'password-bar-strength-' + strengthLevel);
        switch (strengthLevel) {
            case 0:
                this._divText$2.set_innerHTML('');
                break;
            case 1:
                this._divText$2.set_innerHTML(this._parameters$2.textStrength1);
                break;
            case 2:
                this._divText$2.set_innerHTML(this._parameters$2.textStrength2);
                break;
            case 3:
                this._divText$2.set_innerHTML(this._parameters$2.textStrength3);
                break;
            case 4:
                this._divText$2.set_innerHTML(this._parameters$2.textStrength4);
                break;
        }
    },
    
    checkPasswordStrength: function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarker$checkPasswordStrength(password) {
        /// <param name="password" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.PASSWORD_STRENGTH_CHARACTERS"></returns>
        var strength = js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker.getPasswordStrength(password);
        var exceedsMinLength = password.length > this._parameters$2.minLength;
        this._updateBarAndText$2(strength, exceedsMinLength);
        return strength;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters

js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters = function js_com_cs_v4_UI_Forms_FieldPasswordStrengthMarkerParameters() {
    /// <field name="minLength" type="Number" integer="true">
    /// </field>
    /// <field name="textStrength1" type="String">
    /// </field>
    /// <field name="textStrength2" type="String">
    /// </field>
    /// <field name="textStrength3" type="String">
    /// </field>
    /// <field name="textStrength4" type="String">
    /// </field>
}
js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters.prototype = {
    minLength: 0,
    textStrength1: 'Too Weak',
    textStrength2: 'Normal',
    textStrength3: 'Strong',
    textStrength4: 'Perfect'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldValidationResult

js.com.cs.v4.UI.Forms.FieldValidationResult = function js_com_cs_v4_UI_Forms_FieldValidationResult(status, message) {
    /// <param name="status" type="js.com.cs.v4.UI.Forms.VALIDATION_STATUS">
    /// </param>
    /// <param name="message" type="String">
    /// </param>
    /// <field name="message" type="String">
    /// </field>
    /// <field name="status" type="js.com.cs.v4.UI.Forms.VALIDATION_STATUS">
    /// </field>
    if (ss.isNullOrUndefined(status)) {
        this.status = js.com.cs.v4.UI.Forms.VALIDATION_STATUS.none;
    }
    else {
        this.status = status;
        this.message = message;
    }
}
js.com.cs.v4.UI.Forms.FieldValidationResult.prototype = {
    message: null,
    status: 0,
    
    isError: function js_com_cs_v4_UI_Forms_FieldValidationResult$isError() {
        /// <returns type="Boolean"></returns>
        return this.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.Field

js.com.cs.v4.UI.Forms.Field = function js_com_cs_v4_UI_Forms_Field(element, title, ValidationParams, customCSSClasses) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="ValidationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <field name="__cssHandler$3" type="js.com.cs.v4.UI.Forms.FieldCSSHandler">
    /// </field>
    /// <field name="_inputConstraint$3" type="js.com.cs.v4.UI.Forms.FieldInputConstraint">
    /// </field>
    /// <field name="_disabled$3" type="Boolean">
    /// </field>
    /// <field name="_readOnly$3" type="Boolean">
    /// </field>
    js.com.cs.v4.UI.Forms.Field.initializeBase(this, [ element, title, ValidationParams, customCSSClasses ]);
    element = this.getElementFromElementParameter(element);
    if (element == null) {
        js.com.cs.v4.Util.Console.log("js.com.cs.v4.UI.Forms.Field::  Element '" + element + "' does not exist");
    }
    else {
    }
    this._init$3();
}
js.com.cs.v4.UI.Forms.Field.prototype = {
    __cssHandler$3: null,
    
    get__cssHandler$3: function js_com_cs_v4_UI_Forms_Field$get__cssHandler$3() {
        /// <value type="js.com.cs.v4.UI.Forms.FieldCSSHandler"></value>
        if (this.__cssHandler$3 == null) {
            this.__cssHandler$3 = new js.com.cs.v4.UI.Forms.FieldCSSHandler(this, this.getCssControls(), this._cssClasses);
        }
        return this.__cssHandler$3;
    },
    
    _inputConstraint$3: null,
    _disabled$3: false,
    _readOnly$3: false,
    
    get_disabled: function js_com_cs_v4_UI_Forms_Field$get_disabled() {
        /// <value type="Boolean"></value>
        return this._disabled$3;
    },
    set_disabled: function js_com_cs_v4_UI_Forms_Field$set_disabled(value) {
        /// <value type="Boolean"></value>
        this._disabled$3 = value;
        this.get__cssHandler$3().update();
        return value;
    },
    
    get_required: function js_com_cs_v4_UI_Forms_Field$get_required() {
        /// <value type="Boolean"></value>
        return js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'get_required');
    },
    set_required: function js_com_cs_v4_UI_Forms_Field$set_required(value) {
        /// <value type="Boolean"></value>
        js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'set_required', [ value ]);
        this.get__cssHandler$3().update();
        return value;
    },
    
    get_fieldValidationStatus: function js_com_cs_v4_UI_Forms_Field$get_fieldValidationStatus() {
        /// <value type="js.com.cs.v4.UI.Forms.FieldValidationResult"></value>
        return js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'get_fieldValidationStatus');
    },
    set_fieldValidationStatus: function js_com_cs_v4_UI_Forms_Field$set_fieldValidationStatus(value) {
        /// <value type="js.com.cs.v4.UI.Forms.FieldValidationResult"></value>
        js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'set_fieldValidationStatus', [ value ]);
        this.get__cssHandler$3().update();
        return value;
    },
    
    get_readOnly: function js_com_cs_v4_UI_Forms_Field$get_readOnly() {
        /// <value type="Boolean"></value>
        return this._readOnly$3;
    },
    set_readOnly: function js_com_cs_v4_UI_Forms_Field$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this._readOnly$3 = value;
        this.get__cssHandler$3().update();
        return value;
    },
    
    getCssControls: function js_com_cs_v4_UI_Forms_Field$getCssControls() {
        /// <returns type="Array" elementType="MyElement"></returns>
        var cssControls = [];
        cssControls[0] = this.get_element();
        return cssControls;
    },
    
    onFocus: function js_com_cs_v4_UI_Forms_Field$onFocus() {
        js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'onFocus');
        this.get__cssHandler$3().update();
    },
    
    onBlur: function js_com_cs_v4_UI_Forms_Field$onBlur() {
        js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'onBlur');
        this.get__cssHandler$3().update();
    },
    
    _init$3: function js_com_cs_v4_UI_Forms_Field$_init$3() {
        this._inputConstraint$3 = new js.com.cs.v4.UI.Forms.FieldInputConstraint(this, this.get_validationParams());
        this.get__cssHandler$3().update();
    },
    
    get_hasFocus: function js_com_cs_v4_UI_Forms_Field$get_hasFocus() {
        /// <value type="Boolean"></value>
        return js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'get_hasFocus');
    },
    set_hasFocus: function js_com_cs_v4_UI_Forms_Field$set_hasFocus(value) {
        /// <value type="Boolean"></value>
        js.com.cs.v4.UI.Forms.Field.callBaseMethod(this, 'set_hasFocus', [ value ]);
        this.updateCss();
        return value;
    },
    
    toString: function js_com_cs_v4_UI_Forms_Field$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Field - ' + this.id + ']';
    },
    
    updateCss: function js_com_cs_v4_UI_Forms_Field$updateCss() {
        this.get__cssHandler$3().update();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldBase

js.com.cs.v4.UI.Forms.FieldBase = function js_com_cs_v4_UI_Forms_FieldBase(element, id, title, validationParams, customCSSClasses, showValidationIcon) {
    /// <summary>
    /// This is the basic class for any type of fields within forms.
    /// You must make sure to:
    /// - call the 'onFocus' method from last item
    /// - call the 'onBlur' method from last item
    /// - init is called onJqueryReady, so just override it
    /// </summary>
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="id" type="String">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <param name="showValidationIcon" type="Boolean">
    /// </param>
    /// <field name="custoM_VALIDATION_NO_ERROR" type="String" static="true">
    /// The value to store in cached store when there is no error from validation
    /// </field>
    /// <field name="form" type="js.com.cs.v4.UI.Forms.Form">
    /// </field>
    /// <field name="_xhrCustomValidation$1" type="js.com.cs.v4.Classes.XHR.XHRGetJSONRequest">
    /// </field>
    /// <field name="_xhrCustomValidationCachedResults" type="Object">
    /// </field>
    /// <field name="_xhrCustomValidationCheckingValue$1" type="String">
    /// </field>
    /// <field name="_currErrMessageTooltip$1" type="js.com.cs.v4.UI.Tooltip.ControlTooltip">
    /// </field>
    /// <field name="_currErrMessageTooltipContent$1" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_showingErrorTooltip$1" type="Boolean">
    /// </field>
    /// <field name="_callHideErrorTooltip$1" type="js.com.cs.v4.Time.DelayedCall">
    /// </field>
    /// <field name="_validationParams$1" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase">
    /// </field>
    /// <field name="_fieldValidationStatus$1" type="js.com.cs.v4.UI.Forms.FieldValidationResult">
    /// </field>
    /// <field name="_validationIcon$1" type="js.com.cs.v4.UI.Forms.FieldValidationIcon">
    /// </field>
    /// <field name="_showValidationIcon$1" type="Boolean">
    /// </field>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="_Element" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_cssClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </field>
    /// <field name="_hasLostFocusedAtLeastOnce$1" type="Boolean">
    /// </field>
    /// <field name="_hasFocus$1" type="Boolean">
    /// </field>
    /// <field name="__onFocusChanged$1" type="Action">
    /// </field>
    this._xhrCustomValidationCachedResults = {};
    js.com.cs.v4.UI.Forms.FieldBase.initializeBase(this);
    this._initializeID$1(element, id);
    var elementID = null;
    if (Type.canCast(element, String)) {
        elementID = element;
        var jElem = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(elementID);
        if (jElem.length > 0) {
            element = jElem.get(0);
        }
    }
    if (element == null) {
        js.com.cs.v4.Util.Console.log("js.com.cs.v4.UI.Forms.Field::  Element '" + elementID + "' does not exist");
    }
    if (ss.isNullOrUndefined(customCSSClasses)) {
        customCSSClasses = new js.com.cs.v4.UI.Forms.FieldCSSClasses();
    }
    this._showValidationIcon$1 = showValidationIcon;
    this._Element = new js.com.cs.v4.Controls.Common.MyElement(element);
    this._cssClasses = customCSSClasses;
    if (validationParams == null) {
        validationParams = {};
    }
    this._validationParams$1 = validationParams;
    this.title = title;
    this._init$1();
}
js.com.cs.v4.UI.Forms.FieldBase.prototype = {
    form: null,
    _xhrCustomValidation$1: null,
    _xhrCustomValidationCheckingValue$1: null,
    _currErrMessageTooltip$1: null,
    _currErrMessageTooltipContent$1: null,
    _showingErrorTooltip$1: false,
    _callHideErrorTooltip$1: null,
    _validationParams$1: null,
    
    get_validationParams: function js_com_cs_v4_UI_Forms_FieldBase$get_validationParams() {
        /// <value type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase"></value>
        return this._validationParams$1;
    },
    set_validationParams: function js_com_cs_v4_UI_Forms_FieldBase$set_validationParams(value) {
        /// <value type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase"></value>
        this._validationParams$1 = value;
        return value;
    },
    
    get_hasError: function js_com_cs_v4_UI_Forms_FieldBase$get_hasError() {
        /// <value type="Boolean"></value>
        return this._fieldValidationStatus$1 != null && this._fieldValidationStatus$1.isError();
    },
    
    _fieldValidationStatus$1: null,
    
    get_fieldValidationStatus: function js_com_cs_v4_UI_Forms_FieldBase$get_fieldValidationStatus() {
        /// <value type="js.com.cs.v4.UI.Forms.FieldValidationResult"></value>
        return this._fieldValidationStatus$1;
    },
    set_fieldValidationStatus: function js_com_cs_v4_UI_Forms_FieldBase$set_fieldValidationStatus(value) {
        /// <value type="js.com.cs.v4.UI.Forms.FieldValidationResult"></value>
        this._fieldValidationStatus$1 = value;
        this._updateValidationIcon$1();
        if (!this.get_hasError()) {
            this.hideErrorIfGotError(true, true);
        }
        return value;
    },
    
    _validationIcon$1: null,
    _showValidationIcon$1: false,
    
    get_valueObject: function js_com_cs_v4_UI_Forms_FieldBase$get_valueObject() {
        /// <value type="Object"></value>
        return this.getValueObject();
    },
    set_valueObject: function js_com_cs_v4_UI_Forms_FieldBase$set_valueObject(value) {
        /// <value type="Object"></value>
        this.setValueObject(value);
        this.validateAjaxCustomValidation();
        return value;
    },
    
    title: null,
    id: null,
    _Element: null,
    _cssClasses: null,
    
    get_element: function js_com_cs_v4_UI_Forms_FieldBase$get_element() {
        /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
        return this._Element;
    },
    
    get_cssClasses: function js_com_cs_v4_UI_Forms_FieldBase$get_cssClasses() {
        /// <value type="js.com.cs.v4.UI.Forms.FieldCSSClasses"></value>
        return this._cssClasses;
    },
    
    _initializeID$1: function js_com_cs_v4_UI_Forms_FieldBase$_initializeID$1(element, id) {
        /// <param name="element" type="Object" domElement="true">
        /// </param>
        /// <param name="id" type="String">
        /// </param>
        if (!String.isNullOrEmpty(id)) {
            this.id = id;
        }
        else {
            if (Type.canCast(element, String)) {
                this.id = element;
            }
            else {
                this.id = element.id;
            }
        }
        if (String.isNullOrEmpty(this.id)) {
            throw new Error("Please specify ID for element '" + element + "' and passed id '" + id + "'");
        }
    },
    
    initialValidateOnBlur: function js_com_cs_v4_UI_Forms_FieldBase$initialValidateOnBlur() {
        if (!this._validationParams$1.doNotValidateOnBlur && !this.isEmpty()) {
            this.validateOnBlur();
        }
    },
    
    _initFieldWithForm$1: function js_com_cs_v4_UI_Forms_FieldBase$_initFieldWithForm$1() {
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().addField(this);
    },
    
    getRow: function js_com_cs_v4_UI_Forms_FieldBase$getRow() {
        /// <summary>
        /// Gets the closest row from this element
        /// </summary>
        /// <returns type="jQuery"></returns>
        var jqueryRow = this.get_element().get_jQueryElement().closest('tr');
        return jqueryRow;
    },
    
    _initValidationIcon$1: function js_com_cs_v4_UI_Forms_FieldBase$_initValidationIcon$1() {
        if (this._showValidationIcon$1) {
            var fieldRow = this.getRow();
            var tdValidation = js.com.JQueryScriptSharpV2.jQueryUtil.select('.' + this.get_cssClasses().cssClassTdValidationIcon, fieldRow);
            if (tdValidation.length > 0) {
                this._validationIcon$1 = new js.com.cs.v4.UI.Forms.FieldValidationIcon(this._cssClasses);
                tdValidation.append(this._validationIcon$1.get_element());
            }
        }
    },
    
    _initHandlers$1: function js_com_cs_v4_UI_Forms_FieldBase$_initHandlers$1() {
    },
    
    _destroyTooltip$1: function js_com_cs_v4_UI_Forms_FieldBase$_destroyTooltip$1(withAnimations) {
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        if (this._currErrMessageTooltip$1 != null) {
            if (withAnimations) {
                this._currErrMessageTooltip$1.hideDestroyAndRemoveElements();
            }
            else {
                this._currErrMessageTooltip$1.destroyAndRemoveElements();
            }
            this._currErrMessageTooltip$1 = null;
            this._currErrMessageTooltipContent$1 = null;
        }
    },
    
    _getErrorTooltip$1: function js_com_cs_v4_UI_Forms_FieldBase$_getErrorTooltip$1(errorMessage) {
        /// <param name="errorMessage" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Tooltip.ControlTooltip"></returns>
        if (this._validationParams$1.errMsgTooltipParams == null) {
            this._validationParams$1.errMsgTooltipParams = new js.com.cs.v4.UI.Tooltip.ControlTooltipParams();
        }
        var divError = new js.com.cs.v4.Controls.Common.MyDivElement();
        this._validationParams$1.errMsgTooltipParams.tooltipContent = divError;
        this._validationParams$1.errMsgTooltipParams.tooltipIcon = this._validationIcon$1;
        this._validationParams$1.errMsgTooltipParams.cssClassNormal = null;
        this._validationParams$1.errMsgTooltipParams.cssClassRollover = null;
        this._validationParams$1.errMsgTooltipParams.cssClassTooltipContent = this._validationParams$1.cssClassErrorTooltipContent;
        divError.set_innerHTML(errorMessage);
        this._currErrMessageTooltipContent$1 = divError;
        var cp = new js.com.cs.v4.UI.Tooltip.ControlTooltip(this._validationParams$1.errMsgTooltipParams);
        return cp;
    },
    
    showErrorTooltipIfGotError: function js_com_cs_v4_UI_Forms_FieldBase$showErrorTooltipIfGotError(showTooltip) {
        /// <param name="showTooltip" type="Boolean">
        /// </param>
        this._destroyDelayedCallHideErrMsg$1();
        if (!this._showingErrorTooltip$1) {
            this._showingErrorTooltip$1 = true;
            if (showTooltip && this._currErrMessageTooltip$1 != null) {
                this._currErrMessageTooltip$1.showTooltip();
            }
        }
    },
    
    hideErrorIfGotError: function js_com_cs_v4_UI_Forms_FieldBase$hideErrorIfGotError(destroy, withAnimations) {
        /// <param name="destroy" type="Boolean">
        /// </param>
        /// <param name="withAnimations" type="Boolean">
        /// </param>
        this._destroyDelayedCallHideErrMsg$1();
        if (this._showingErrorTooltip$1 || destroy) {
            this._showingErrorTooltip$1 = false;
            if (this._currErrMessageTooltip$1 != null) {
                if (destroy) {
                    this._destroyTooltip$1(withAnimations);
                }
                else {
                    this._currErrMessageTooltip$1.hideTooltip(false);
                }
            }
        }
    },
    
    onFocus: function js_com_cs_v4_UI_Forms_FieldBase$onFocus() {
        this.set_hasFocus(true);
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().set_fieldWithFocus(this);
        this.showErrorTooltipIfGotError(true);
        if (this._currErrMessageTooltip$1 != null) {
            this._currErrMessageTooltip$1.stop();
        }
    },
    
    onBlur: function js_com_cs_v4_UI_Forms_FieldBase$onBlur() {
        this.set_hasFocus(false);
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().set_fieldWithFocus(null);
        this.hideErrorIfGotError(false, true);
        if (!this.get_validationParams().doNotValidateOnBlur) {
            this.validateOnBlur();
        }
        if (this._currErrMessageTooltip$1 != null) {
            this._currErrMessageTooltip$1.start();
        }
    },
    
    _init$1: function js_com_cs_v4_UI_Forms_FieldBase$_init$1() {
        /// <summary>
        /// You must call this method once ready initializing
        /// </summary>
        this._initFieldWithForm$1();
        this._initHandlers$1();
        this._initValidationIcon$1();
        window.setTimeout(ss.Delegate.create(this, this.initialValidateOnBlur), 5);
    },
    
    _updateValidationIcon$1: function js_com_cs_v4_UI_Forms_FieldBase$_updateValidationIcon$1() {
        if (this._validationIcon$1 != null) {
            var showDimIcon = false;
            var validationStatus = this.get_fieldValidationStatus();
            if (validationStatus != null) {
                if (validationStatus.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success) {
                    this._validationIcon$1.showSuccess();
                    this.hideErrorIfGotError(false, true);
                }
                else if (validationStatus.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error) {
                    this._validationIcon$1.showError(validationStatus.message);
                    if (this._validationParams$1.showErrorHelpMessage) {
                        if (this._currErrMessageTooltip$1 == null) {
                            this._currErrMessageTooltip$1 = this._getErrorTooltip$1(validationStatus.message);
                        }
                        else {
                            this._currErrMessageTooltipContent$1.set_innerHTML(validationStatus.message);
                        }
                    }
                }
                else if (validationStatus.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.waitingForAJAX) {
                    this._validationIcon$1.showLoading();
                }
                else {
                    showDimIcon = true;
                }
            }
            if (showDimIcon) {
                this._validationIcon$1.showDim();
            }
        }
    },
    
    _destroyDelayedCallHideErrMsg$1: function js_com_cs_v4_UI_Forms_FieldBase$_destroyDelayedCallHideErrMsg$1() {
        if (this._callHideErrorTooltip$1 != null) {
            this._callHideErrorTooltip$1.destroy();
            this._callHideErrorTooltip$1 = null;
        }
    },
    
    showValidationErrorAndHide: function js_com_cs_v4_UI_Forms_FieldBase$showValidationErrorAndHide() {
        if (this.get_hasError()) {
            if (this.get_validationParams().errMsgShowDurationBeforeHideMS > 0) {
                this.showErrorTooltipIfGotError(true);
                this._destroyDelayedCallHideErrMsg$1();
                this._callHideErrorTooltip$1 = new js.com.cs.v4.Time.DelayedCall(ss.Delegate.create(this, this._showValidationDelayTick$1), this.get_validationParams().errMsgShowDurationBeforeHideMS);
                this._callHideErrorTooltip$1.invoke();
            }
        }
    },
    
    _showValidationDelayTick$1: function js_com_cs_v4_UI_Forms_FieldBase$_showValidationDelayTick$1() {
        this.hideErrorIfGotError(false, true);
    },
    
    _destroyXhrValidation$1: function js_com_cs_v4_UI_Forms_FieldBase$_destroyXhrValidation$1() {
        if (this._xhrCustomValidation$1 != null) {
            this._xhrCustomValidation$1.remove_onDataLoaded(ss.Delegate.create(this, this._xhrCustomValidation_OnDataLoaded$1));
            this._xhrCustomValidation$1.abort();
            this._xhrCustomValidation$1 = null;
        }
    },
    
    getAjaxCustomValidationValue: function js_com_cs_v4_UI_Forms_FieldBase$getAjaxCustomValidationValue() {
        /// <returns type="String"></returns>
        var ajaxValue = (this.get_valueObject() == null) ? '' : this.get_valueObject().toString();
        return ajaxValue;
    },
    
    getStoredCustomValidationCachedErrorMessage: function js_com_cs_v4_UI_Forms_FieldBase$getStoredCustomValidationCachedErrorMessage(val) {
        /// <param name="val" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return Type.safeCast(this._xhrCustomValidationCachedResults[val], String);
    },
    
    validateAjaxCustomValidation: function js_com_cs_v4_UI_Forms_FieldBase$validateAjaxCustomValidation() {
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        if (this.get_validationParams().customValidationAjaxHandlerURL != null) {
            var result = new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.waitingForAJAX);
            result.message = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().waitingForAjaxToLoad.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, this.title);
            var val = this.getAjaxCustomValidationValue();
            if (!this.get_validationParams().customValidationValueCaseSensitive && val != null) {
                val = val.toLowerCase();
            }
            var cachedErrMsg = this.getStoredCustomValidationCachedErrorMessage(val);
            if (cachedErrMsg === js.com.cs.v4.UI.Forms.FieldBase.custoM_VALIDATION_NO_ERROR || this._omitCustomValidationValue$1(val)) {
                result.status = js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success;
                result.message = null;
            }
            else if (cachedErrMsg != null) {
                result.status = js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error;
                result.message = cachedErrMsg;
            }
            else if (val !== this._xhrCustomValidationCheckingValue$1) {
                this._destroyXhrValidation$1();
                this._xhrCustomValidationCheckingValue$1 = val;
                var dataParams = {};
                dataParams['data'] = val;
                this._xhrCustomValidation$1 = new js.com.cs.v4.Classes.XHR.XHRGetJSONRequest();
                this._showLoadingIcon$1();
                this._xhrCustomValidation$1.add_onDataLoaded(ss.Delegate.create(this, this._xhrCustomValidation_OnDataLoaded$1));
                this._xhrCustomValidationCheckingValue$1 = val;
                this._xhrCustomValidation$1.getJSON(this.get_validationParams().customValidationAjaxHandlerURL, dataParams);
            }
            return result;
        }
        return null;
    },
    
    _xhrCustomValidation_OnDataLoaded$1: function js_com_cs_v4_UI_Forms_FieldBase$_xhrCustomValidation_OnDataLoaded$1(request, data, status) {
        /// <param name="request" type="js.com.cs.v4.Classes.XHR.XHRGetJSONRequest">
        /// </param>
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="status" type="js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS">
        /// </param>
        this._destroyXhrValidation$1();
        var response = data;
        var result = new js.com.cs.v4.UI.Forms.FieldValidationResult();
        if (!this.get_validationParams().cacheCustomValidationResults) {
            Object.clearKeys(this._xhrCustomValidationCachedResults);
        }
        if (status === js.com.cs.v4.Classes.XHR.XHR_REQUEST_STATUS.success) {
            if (!ss.isNullOrUndefined(response.error)) {
                result.status = js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error;
                result.message = response.error;
                this._xhrCustomValidationCachedResults[this._xhrCustomValidationCheckingValue$1] = response.error;
            }
            else {
                result.status = js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success;
                this._xhrCustomValidationCachedResults[this._xhrCustomValidationCheckingValue$1] = js.com.cs.v4.UI.Forms.FieldBase.custoM_VALIDATION_NO_ERROR;
            }
        }
        this.set_fieldValidationStatus(result);
        if (!this.get_hasError()) {
            this.validate(true, true, false);
        }
        else {
            this.showValidationErrorAndHide();
        }
        this._xhrCustomValidationCheckingValue$1 = null;
    },
    
    _showLoadingIcon$1: function js_com_cs_v4_UI_Forms_FieldBase$_showLoadingIcon$1() {
        this._validationIcon$1.showLoading();
    },
    
    _omitCustomValidationValue$1: function js_com_cs_v4_UI_Forms_FieldBase$_omitCustomValidationValue$1(val) {
        /// <summary>
        /// Check whether this value is one which should be omitted
        /// </summary>
        /// <param name="val" type="String">
        /// </param>
        /// <returns type="Boolean"></returns>
        var omitValueResult = false;
        if (String.isNullOrEmpty(val)) {
            omitValueResult = true;
        }
        else {
            if (this.get_validationParams().customValidationOmitValues != null) {
                for (var i = 0; i < this.get_validationParams().customValidationOmitValues.length; i++) {
                    var omitValue = this.get_validationParams().customValidationOmitValues[i];
                    if (!this.get_validationParams().customValidationValueCaseSensitive) {
                        omitValue = omitValue.toLowerCase();
                    }
                    if (val === omitValue) {
                        return true;
                    }
                }
            }
        }
        return omitValueResult;
    },
    
    validateOnBlur: function js_com_cs_v4_UI_Forms_FieldBase$validateOnBlur() {
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        var result = new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
        if (this.get_validationParams().validateEvenIfNotVisible || this.get_element().isVisible(true)) {
            result = this.validate(true, true, true);
        }
        return result;
    },
    
    _hasLostFocusedAtLeastOnce$1: false,
    
    get_hasLostFocusAtLeastOnce: function js_com_cs_v4_UI_Forms_FieldBase$get_hasLostFocusAtLeastOnce() {
        /// <value type="Boolean"></value>
        return this._hasLostFocusedAtLeastOnce$1;
    },
    
    _hasFocus$1: false,
    
    get_hasFocus: function js_com_cs_v4_UI_Forms_FieldBase$get_hasFocus() {
        /// <value type="Boolean"></value>
        return this._hasFocus$1;
    },
    set_hasFocus: function js_com_cs_v4_UI_Forms_FieldBase$set_hasFocus(value) {
        /// <value type="Boolean"></value>
        if (!value && this._hasFocus$1 && !this._hasLostFocusedAtLeastOnce$1) {
            this._hasLostFocusedAtLeastOnce$1 = true;
        }
        var v = value;
        var changed = value !== v;
        this._hasFocus$1 = v;
        if (changed && this.__onFocusChanged$1 != null) {
            this.__onFocusChanged$1();
        }
        return value;
    },
    
    add_onFocusChanged: function js_com_cs_v4_UI_Forms_FieldBase$add_onFocusChanged(value) {
        /// <param name="value" type="Function" />
        this.__onFocusChanged$1 = ss.Delegate.combine(this.__onFocusChanged$1, value);
    },
    remove_onFocusChanged: function js_com_cs_v4_UI_Forms_FieldBase$remove_onFocusChanged(value) {
        /// <param name="value" type="Function" />
        this.__onFocusChanged$1 = ss.Delegate.remove(this.__onFocusChanged$1, value);
    },
    
    __onFocusChanged$1: null,
    
    toString: function js_com_cs_v4_UI_Forms_FieldBase$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldBase - ' + this.id + ']';
    },
    
    isEmpty: function js_com_cs_v4_UI_Forms_FieldBase$isEmpty() {
        /// <returns type="Boolean"></returns>
        var val = this.get_valueObject();
        if (ss.isNullOrUndefined(val) || (Type.canCast(val, String) && String.isNullOrEmpty(val) || (Type.canCast(val, Boolean) && !(val)))) {
            return true;
        }
        return false;
    },
    
    destroy: function js_com_cs_v4_UI_Forms_FieldBase$destroy() {
        if (!this.get_destroyed()) {
            js.com.cs.v4.UI.Forms.FormsCollection.get_instance().removeField(this);
            this.hideErrorIfGotError(true, false);
        }
        js.com.cs.v4.UI.Forms.FieldBase.callBaseMethod(this, 'destroy');
    },
    
    isCheckingAJAXValidation: function js_com_cs_v4_UI_Forms_FieldBase$isCheckingAJAXValidation() {
        /// <returns type="Boolean"></returns>
        return this._xhrCustomValidation$1 != null;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldBaseCustomAjaxValidationResponseParams

js.com.cs.v4.UI.Forms.FieldBaseCustomAjaxValidationResponseParams = function js_com_cs_v4_UI_Forms_FieldBaseCustomAjaxValidationResponseParams() {
    /// <field name="error" type="String">
    /// </field>
}
js.com.cs.v4.UI.Forms.FieldBaseCustomAjaxValidationResponseParams.prototype = {
    error: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams

js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams = function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams(element, title, ValidationParams, customCSSClasses) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="ValidationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <field name="__fieldValidator$2" type="js.com.cs.v4.UI.Forms.FieldValidator">
    /// </field>
    /// <field name="validationSubGroups" type="Array" elementType="FieldSubGroup">
    /// </field>
    /// <field name="_addedJQueryDatePickerWrapper$2" type="Boolean">
    /// </field>
    this.validationSubGroups = [];
    js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.initializeBase(this, [ element, null, title, ValidationParams, customCSSClasses, ValidationParams.showValidationIcon ]);
    element = this.getElementFromElementParameter(element);
    if (element == null) {
        js.com.cs.v4.Util.Console.log("js.com.cs.v4.UI.Forms.Field::  Element '" + element + "' does not exist");
    }
    else {
        if (ValidationParams.subGroupParams == null) {
            ValidationParams.subGroupParams = {};
        }
    }
    this._init$2();
}
js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.prototype = {
    __fieldValidator$2: null,
    
    get__fieldValidator$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$get__fieldValidator$2() {
        /// <value type="js.com.cs.v4.UI.Forms.FieldValidator"></value>
        if (this.__fieldValidator$2 == null) {
            this.__fieldValidator$2 = new js.com.cs.v4.UI.Forms.FieldValidator(this, this.get_validationParams());
        }
        return this.__fieldValidator$2;
    },
    
    get_validationParams: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$get_validationParams() {
        /// <value type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams"></value>
        return js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.callBaseMethod(this, 'get_validationParams');
    },
    
    get_required: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$get_required() {
        /// <value type="Boolean"></value>
        return this.get_validationParams().isRequired;
    },
    set_required: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$set_required(value) {
        /// <value type="Boolean"></value>
        this.get_validationParams().isRequired = value;
        return value;
    },
    
    isEmpty: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$isEmpty() {
        /// <returns type="Boolean"></returns>
        var val = this.get_valueObject();
        return js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.callBaseMethod(this, 'isEmpty') || (Type.canCast(val, String) && val === this.get_validationParams().initialEmptyText);
    },
    
    getElementFromElementParameter: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$getElementFromElementParameter(element) {
        /// <param name="element" type="Object" domElement="true">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        var elementID = null;
        if (Type.canCast(element, String)) {
            elementID = element;
            element = document.getElementById(elementID);
        }
        return element;
    },
    
    onFocus: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$onFocus() {
        if (this.get_valueObject() === this.get_validationParams().initialEmptyText) {
            this.set_valueObject('');
        }
        js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.callBaseMethod(this, 'onFocus');
    },
    
    onBlur: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$onBlur() {
        if (this.isEmpty() && !String.isNullOrEmpty(this.get_validationParams().initialEmptyText)) {
            this.set_valueObject(this.get_validationParams().initialEmptyText);
        }
        js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.callBaseMethod(this, 'onBlur');
    },
    
    _initGroup$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$_initGroup$2() {
        if (!ss.isNullOrUndefined(this.get_validationParams().subGroupParams)) {
            var groupID = this.get_validationParams().subGroupParams.groupID;
            if (!ss.isNullOrUndefined(groupID)) {
                var g = js.com.cs.v4.UI.Forms.FormsCollection.get_instance().getGroupByID(groupID);
                if (g != null && !(Type.canCast(g, js.com.cs.v4.UI.Forms.FieldSubGroup))) {
                    alert("An item with id'" + groupID + "' exists while it should be a group not a '" + g + "'.  Please change group id.");
                }
                if (!ss.isNullOrUndefined(g)) {
                    g.addFieldToGroup(this);
                }
                else {
                    var tmp = [];
                    tmp[tmp.length] = this.id;
                    var newGroup = new js.com.cs.v4.UI.Forms.FieldSubGroup(tmp, this.get_validationParams().subGroupParams, this.get_validationParams().validationGroup);
                }
            }
        }
    },
    
    _init$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$_init$2() {
        this._initGroup$2();
        window.setTimeout(ss.Delegate.create(this, this._updateInitialEmptyText$2), 10);
    },
    
    _updateInitialEmptyText$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$_updateInitialEmptyText$2() {
        if (this.isEmpty() && !String.isNullOrEmpty(this.get_validationParams().initialEmptyText)) {
            this.set_valueObject(this.get_validationParams().initialEmptyText);
        }
    },
    
    _validateSubGroups$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$_validateSubGroups$2() {
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        if (this.validationSubGroups != null && this.validationSubGroups.length > 0) {
            for (var i = 0; i < this.validationSubGroups.length; i++) {
                var valGroup = this.validationSubGroups[i];
                if (valGroup.haveAllFieldsLostFocusAtLeastOnce() && valGroup.areAllFieldsIndependentlyValid()) {
                    var err = valGroup.validate(true, false, true);
                    if (err != null) {
                        return err.validationResult;
                    }
                }
            }
            return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
        }
        return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.none);
    },
    
    _isPartOfSameValuesSubGroupAndNotFirstField$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$_isPartOfSameValuesSubGroupAndNotFirstField$2() {
        /// <summary>
        /// Check whether this field is part of a group which requires all the fields
        /// to have same values and it checks also if this is the FIRST field in the group
        /// [email] 1st
        /// [conf-email] 2nd
        /// ...
        /// </summary>
        /// <returns type="Boolean"></returns>
        if (this.validationSubGroups != null) {
            var sameValues = false;
            for (var i = 0; i < this.validationSubGroups.length; i++) {
                var group = this.validationSubGroups[i];
                if (group.get_parameters().groupType === js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE.sameValues) {
                    sameValues = true;
                    if (group.get_fields() != null) {
                        if (group.get_fields()[0] !== this) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    },
    
    validate: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$validate(showError, validateSubGroupsAlso, callAjaxCustomValidation) {
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <param name="validateSubGroupsAlso" type="Boolean">
        /// </param>
        /// <param name="callAjaxCustomValidation" type="Boolean">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        if (this.get_validationParams().validateEvenIfNotVisible || this.get_element().isVisible(true)) {
            var fieldValidationResult = new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
            if (this.get_validationParams().hasValidation) {
                if (!this.get_disabled()) {
                    fieldValidationResult = this.get__fieldValidator$2().validate();
                    if (fieldValidationResult == null || !fieldValidationResult.isError()) {
                        if (!String.isNullOrEmpty(this.get_validationParams().customValidationAjaxHandlerURL)) {
                            if (callAjaxCustomValidation) {
                                fieldValidationResult = this.validateAjaxCustomValidation();
                            }
                        }
                        if (fieldValidationResult != null && fieldValidationResult.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success) {
                            if (validateSubGroupsAlso && this.validationSubGroups != null && this.validationSubGroups.length > 0) {
                                fieldValidationResult = this._validateSubGroups$2();
                            }
                        }
                    }
                    if (showError) {
                        this.set_fieldValidationStatus(fieldValidationResult);
                        if (fieldValidationResult != null && fieldValidationResult.isError()) {
                            this.showValidationErrorAndHide();
                        }
                    }
                }
            }
            return fieldValidationResult;
        }
        else {
            return null;
        }
    },
    
    get_hasFocus: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$get_hasFocus() {
        /// <value type="Boolean"></value>
        return js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.callBaseMethod(this, 'get_hasFocus');
    },
    set_hasFocus: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$set_hasFocus(value) {
        /// <value type="Boolean"></value>
        value = value && !this.get_disabled();
        js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.callBaseMethod(this, 'set_hasFocus', [ value ]);
        return value;
    },
    
    clear: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$clear() {
        this.set_valueObject('');
    },
    
    toString: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldBaseWithFullValidationParams - ' + this.id + ']';
    },
    
    ifEmptyToggleInitialEmptyText: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$ifEmptyToggleInitialEmptyText(setInitialEmptyText) {
        /// <summary>
        /// Toggler to whether show initial empty text if value is empty or else show nothing ''
        /// </summary>
        /// <param name="setInitialEmptyText" type="Boolean">
        /// </param>
        if (!String.isNullOrEmpty(this.get_validationParams().initialEmptyText) && this.isEmpty()) {
            this.set_valueObject((setInitialEmptyText) ? this.get_validationParams().initialEmptyText : '');
        }
    },
    
    getMultiSelectOptions: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$getMultiSelectOptions() {
        /// <returns type="js.com.JQueryScriptSharpV2._jQueryMultiSelectParams"></returns>
        var dpOptions = this.get_validationParams().jQueryMultiSelectParams;
        if (ss.isNullOrUndefined(dpOptions)) {
            dpOptions = {};
            dpOptions.searchable = true;
            dpOptions.sortable = true;
        }
        return dpOptions;
    },
    
    _addedJQueryDatePickerWrapper$2: false,
    
    getDatePickerOptions: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$getDatePickerOptions() {
        /// <returns type="js.com.JQueryScriptSharpV2._jQueryUIDatePickerOptions"></returns>
        var dpOptions = {};
        var dateFormat = this.get_validationParams().dateFormat;
        dateFormat = dateFormat.replaceAll('yyyy', 'yy');
        dpOptions.buttonImage = '/_common/images/icons/v1/icon-calendar.png';
        if (!ss.isNullOrUndefined(this.get_validationParams().dateFrom)) {
            dpOptions.minDate = this.get_validationParams().dateFrom;
        }
        if (!ss.isNullOrUndefined(this.get_validationParams().dateTo)) {
            dpOptions.maxDate = this.get_validationParams().dateTo;
        }
        dpOptions.altFormat = dpOptions.dateFormat = dateFormat;
        dpOptions.showOn = js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams.enumCalendarTypeToString(this.get_validationParams().jQueryUICalendarShowType);
        dpOptions.showButtonPanel = true;
        if (!String.isNullOrEmpty(this.get_validationParams().jQueryUICalendarCustomContainerCSSClass)) {
            dpOptions.beforeShow = ss.Delegate.create(this, this._onBeforeShowDatePicker$2);
        }
        return dpOptions;
    },
    
    _onBeforeShowDatePicker$2: function js_com_cs_v4_UI_Forms_FieldBaseWithFullValidationParams$_onBeforeShowDatePicker$2(input, instance) {
        /// <param name="input" type="Object" domElement="true">
        /// </param>
        /// <param name="instance" type="js.com.JQueryScriptSharpV2._jQueryUIDatePickerInstance">
        /// </param>
        if (!this._addedJQueryDatePickerWrapper$2) {
            var css = this.get_validationParams().jQueryUICalendarCustomContainerCSSClass;
            if (!String.isNullOrEmpty(css)) {
                instance.dpDiv.wrap("<div class='" + css + "' />");
                this._addedJQueryDatePickerWrapper$2 = true;
            }
            instance.settings.beforeShow = null;
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldCSSClasses

js.com.cs.v4.UI.Forms.FieldCSSClasses = function js_com_cs_v4_UI_Forms_FieldCSSClasses() {
    /// <field name="_INSTANCE" type="js.com.cs.v4.UI.Forms.FieldCSSClasses" static="true">
    /// </field>
    /// <field name="cssClassReadOnly" type="String">
    /// </field>
    /// <field name="cssClassFocus" type="String">
    /// </field>
    /// <field name="cssClassOver" type="String">
    /// </field>
    /// <field name="cssClassError" type="String">
    /// </field>
    /// <field name="cssClassDisabled" type="String">
    /// </field>
    /// <field name="cssClassRequired" type="String">
    /// </field>
    /// <field name="cssClassButton" type="String">
    /// </field>
    /// <field name="cssClassLinkButton" type="String">
    /// </field>
    /// <field name="cssClassTdLabel" type="String">
    /// </field>
    /// <field name="cssClassTdField" type="String">
    /// </field>
    /// <field name="cssClassTdHelpIcon" type="String">
    /// </field>
    /// <field name="cssClassTdValidationIcon" type="String">
    /// </field>
    /// <field name="cssClassValidationIconSuccess" type="String">
    /// </field>
    /// <field name="cssClassValidationIconLoading" type="String">
    /// </field>
    /// <field name="cssClassValidationIconError" type="String">
    /// </field>
    /// <field name="cssClassValidationIconDim" type="String">
    /// </field>
    /// <field name="cssClassTrRow" type="String">
    /// </field>
    /// <field name="cssClassTrRowRequired" type="String">
    /// </field>
    /// <field name="NotUsed" type="Boolean">
    /// </field>
}
js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance = function js_com_cs_v4_UI_Forms_FieldCSSClasses$get_Instance() {
    /// <value type="js.com.cs.v4.UI.Forms.FieldCSSClasses"></value>
    if (js.com.cs.v4.UI.Forms.FieldCSSClasses._INSTANCE == null) {
        js.com.cs.v4.UI.Forms.FieldCSSClasses._INSTANCE = new js.com.cs.v4.UI.Forms.FieldCSSClasses();
    }
    return js.com.cs.v4.UI.Forms.FieldCSSClasses._INSTANCE;
}
js.com.cs.v4.UI.Forms.FieldCSSClasses.prototype = {
    cssClassReadOnly: 'readonly',
    cssClassFocus: 'focus',
    cssClassOver: 'over',
    cssClassError: 'error',
    cssClassDisabled: 'disabled',
    cssClassRequired: 'required',
    cssClassButton: 'button',
    cssClassLinkButton: 'link-button',
    cssClassTdLabel: null,
    cssClassTdField: null,
    cssClassTdHelpIcon: null,
    cssClassTdValidationIcon: null,
    cssClassValidationIconSuccess: null,
    cssClassValidationIconLoading: null,
    cssClassValidationIconError: null,
    cssClassValidationIconDim: null,
    cssClassTrRow: null,
    cssClassTrRowRequired: null,
    NotUsed: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldCSSHandler

js.com.cs.v4.UI.Forms.FieldCSSHandler = function js_com_cs_v4_UI_Forms_FieldCSSHandler(field, controls, customCSSClasses) {
    /// <param name="field" type="js.com.cs.v4.UI.Forms.Field">
    /// </param>
    /// <param name="controls" type="Array" elementType="MyElement">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <field name="_controls$1" type="Array" elementType="MyElement">
    /// </field>
    /// <field name="_field$1" type="js.com.cs.v4.UI.Forms.Field">
    /// </field>
    /// <field name="cssClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </field>
    /// <field name="_lastCssClass$1" type="String">
    /// </field>
    /// <field name="_isMouseOver$1" type="Boolean">
    /// </field>
    /// <field name="_initCssClass$1" type="String">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldCSSHandler.initializeBase(this);
    this._initCssClass$1 = field.get_element().get_cssClass();
    this._field$1 = field;
    this._controls$1 = controls;
    if (ss.isNullOrUndefined(customCSSClasses)) {
        customCSSClasses = js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance();
    }
    this.cssClasses = customCSSClasses;
    this.init();
}
js.com.cs.v4.UI.Forms.FieldCSSHandler.prototype = {
    _controls$1: null,
    _field$1: null,
    cssClasses: null,
    _lastCssClass$1: null,
    _isMouseOver$1: false,
    _initCssClass$1: null,
    
    _mouseOver$1: function js_com_cs_v4_UI_Forms_FieldCSSHandler$_mouseOver$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._isMouseOver$1 = true;
        this.update();
    },
    
    _mouseOut$1: function js_com_cs_v4_UI_Forms_FieldCSSHandler$_mouseOut$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._isMouseOver$1 = false;
        this.update();
    },
    
    _removeAllCSS$1: function js_com_cs_v4_UI_Forms_FieldCSSHandler$_removeAllCSS$1() {
        for (var i = 0; i < this._controls$1.length; i++) {
            var e = this._controls$1[i];
            if (!String.isNullOrEmpty(this.cssClasses.cssClassFocus)) {
                e.removeClass(this.cssClasses.cssClassFocus);
            }
            if (!String.isNullOrEmpty(this.cssClasses.cssClassError)) {
                e.removeClass(this.cssClasses.cssClassError);
            }
            if (!String.isNullOrEmpty(this.cssClasses.cssClassDisabled)) {
                e.removeClass(this.cssClasses.cssClassDisabled);
            }
            if (!String.isNullOrEmpty(this.cssClasses.cssClassReadOnly)) {
                e.removeClass(this.cssClasses.cssClassReadOnly);
            }
            if (!String.isNullOrEmpty(this.cssClasses.cssClassRequired)) {
                e.removeClass(this.cssClasses.cssClassRequired);
            }
            if (!String.isNullOrEmpty(this.cssClasses.cssClassOver)) {
                e.removeClass(this.cssClasses.cssClassOver);
            }
        }
    },
    
    _updateCSS$1: function js_com_cs_v4_UI_Forms_FieldCSSHandler$_updateCSS$1(className) {
        /// <param name="className" type="String">
        /// </param>
        if (!String.isNullOrEmpty(className)) {
            this._removeAllCSS$1();
            for (var i = 0; i < this._controls$1.length; i++) {
                this._controls$1[i].addClass(this._initCssClass$1);
                this._controls$1[i].addClass(className);
            }
        }
    },
    
    _getCssClass$1: function js_com_cs_v4_UI_Forms_FieldCSSHandler$_getCssClass$1(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_v4_UI_Forms_FieldCSSHandler$update() {
        this._removeAllCSS$1();
        var cssClass = '';
        if (!String.isNullOrEmpty(this._lastCssClass$1)) {
            for (var i = 0; i < this._controls$1.length; i++) {
                this._controls$1[i].removeClass(this._lastCssClass$1);
            }
        }
        var cssClasses = [];
        cssClasses[cssClasses.length] = 'field';
        cssClasses[cssClasses.length] = (this._field$1.get_readOnly()) ? this.cssClasses.cssClassReadOnly : null;
        cssClasses[cssClasses.length] = (this._field$1.get_required()) ? this.cssClasses.cssClassRequired : null;
        cssClasses[cssClasses.length] = (this._field$1.get_hasError()) ? this.cssClasses.cssClassError : null;
        cssClasses[cssClasses.length] = (this._field$1.get_hasFocus()) ? this.cssClasses.cssClassFocus : null;
        cssClasses[cssClasses.length] = (this._isMouseOver$1) ? this.cssClasses.cssClassOver : null;
        cssClasses[cssClasses.length] = (this._field$1.get_disabled()) ? this.cssClasses.cssClassDisabled : null;
        cssClass = this._getCssClass$1(cssClasses);
        for (var i = 0; i < this._controls$1.length; i++) {
            var e = this._controls$1[i];
            e.addClass(cssClass);
        }
        this._lastCssClass$1 = cssClass;
    },
    
    init: function js_com_cs_v4_UI_Forms_FieldCSSHandler$init() {
        for (var i = 0; i < this._controls$1.length; i++) {
            this._controls$1[i].add_onMouseOver(ss.Delegate.create(this, this._mouseOver$1));
            this._controls$1[i].add_onMouseOut(ss.Delegate.create(this, this._mouseOut$1));
        }
        this.update();
    },
    
    _removeHandlers$1: function js_com_cs_v4_UI_Forms_FieldCSSHandler$_removeHandlers$1() {
        for (var i = 0; i < this._controls$1.length; i++) {
            this._controls$1[i].remove_onMouseOver(ss.Delegate.create(this, this._mouseOver$1));
            this._controls$1[i].remove_onMouseOut(ss.Delegate.create(this, this._mouseOut$1));
        }
    },
    
    destroy: function js_com_cs_v4_UI_Forms_FieldCSSHandler$destroy() {
        this._removeHandlers$1();
        js.com.cs.v4.UI.Forms.FieldCSSHandler.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldDate3Combos

js.com.cs.v4.UI.Forms.FieldDate3Combos = function js_com_cs_v4_UI_Forms_FieldDate3Combos(elementContainer, title, ValidationParams, customCSSClasses, parameters) {
    /// <param name="elementContainer" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="ValidationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v4.UI.Forms.FieldDate3CombosParams">
    /// </param>
    /// <field name="__cmbDay$4" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="__cmbMonth$4" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="__cmbYear$4" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="_onChangeEvenWithKeysInitialisedDay$4" type="Boolean">
    /// </field>
    /// <field name="_onChangeEvenWithKeysInitialisedMonth$4" type="Boolean">
    /// </field>
    /// <field name="_onChangeEvenWithKeysInitialisedYear$4" type="Boolean">
    /// </field>
    /// <field name="_focusedOnDay$4" type="Boolean">
    /// </field>
    /// <field name="_focusedOnMonth$4" type="Boolean">
    /// </field>
    /// <field name="_focusedOnYear$4" type="Boolean">
    /// </field>
    /// <field name="_parameters$4" type="js.com.cs.v4.UI.Forms.FieldDate3CombosParams">
    /// </field>
    /// <field name="__onChange$4" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    /// <field name="___OnChangeEvenWithKeys$4" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldDate3Combos.initializeBase(this, [ elementContainer, title, ValidationParams, customCSSClasses ]);
    this._parameters$4 = parameters;
    this._init$4();
}
js.com.cs.v4.UI.Forms.FieldDate3Combos.prototype = {
    __cmbDay$4: null,
    __cmbMonth$4: null,
    __cmbYear$4: null,
    
    get__cmbDay$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$get__cmbDay$4() {
        /// <value type="js.com.cs.v4.Controls.Form.MyDropDownList"></value>
        if (this.__cmbDay$4 == null) {
            this.__cmbDay$4 = this._getCombobox$4('date-3-combo-day', 0);
            this._initOnChangeEventWithKeysHandler$4();
        }
        return this.__cmbDay$4;
    },
    
    get__cmbMonth$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$get__cmbMonth$4() {
        /// <value type="js.com.cs.v4.Controls.Form.MyDropDownList"></value>
        if (this.__cmbMonth$4 == null) {
            this.__cmbMonth$4 = this._getCombobox$4('date-3-combo-month', 1);
            this._initOnChangeEventWithKeysHandler$4();
        }
        return this.__cmbMonth$4;
    },
    
    get__cmbYear$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$get__cmbYear$4() {
        /// <value type="js.com.cs.v4.Controls.Form.MyDropDownList"></value>
        if (this.__cmbYear$4 == null) {
            this.__cmbYear$4 = this._getCombobox$4('date-3-combo-year', 2);
            this._initOnChangeEventWithKeysHandler$4();
        }
        return this.__cmbYear$4;
    },
    
    _onChangeEvenWithKeysInitialisedDay$4: false,
    _onChangeEvenWithKeysInitialisedMonth$4: false,
    _onChangeEvenWithKeysInitialisedYear$4: false,
    _focusedOnDay$4: false,
    _focusedOnMonth$4: false,
    _focusedOnYear$4: false,
    _parameters$4: null,
    
    isEmpty: function js_com_cs_v4_UI_Forms_FieldDate3Combos$isEmpty() {
        /// <returns type="Boolean"></returns>
        return js.com.cs.v4.UI.Forms.FieldDate3Combos.callBaseMethod(this, 'isEmpty');
    },
    
    _initOnChangeEventWithKeysHandler$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_initOnChangeEventWithKeysHandler$4() {
        if (this.___OnChangeEvenWithKeys$4 != null) {
            if (!this._onChangeEvenWithKeysInitialisedDay$4 && this.get__cmbDay$4() != null) {
                this._onChangeEvenWithKeysInitialisedDay$4 = true;
                this.get__cmbDay$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._onControlChangedWithKeys$4));
            }
            if (!this._onChangeEvenWithKeysInitialisedMonth$4 && this.get__cmbMonth$4() != null) {
                this._onChangeEvenWithKeysInitialisedMonth$4 = true;
                this.get__cmbMonth$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._onControlChangedWithKeys$4));
            }
            if (!this._onChangeEvenWithKeysInitialisedYear$4 && this.get__cmbYear$4() != null) {
                this._onChangeEvenWithKeysInitialisedYear$4 = true;
                this.get__cmbYear$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._onControlChangedWithKeys$4));
            }
        }
    },
    
    _onControlChangedWithKeys$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_onControlChangedWithKeys$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.___OnChangeEvenWithKeys$4 != null) {
            this.___OnChangeEvenWithKeys$4(e);
        }
    },
    
    getCssControls: function js_com_cs_v4_UI_Forms_FieldDate3Combos$getCssControls() {
        /// <returns type="Array" elementType="MyElement"></returns>
        this._initControls$4();
        var elems = [];
        elems[0] = this.get__cmbDay$4();
        elems[1] = this.get__cmbMonth$4();
        elems[2] = this.get__cmbYear$4();
        return elems;
    },
    
    _init$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_init$4() {
        this._initControls$4();
        this._initHandlers$4();
        this._updateDayValues$4();
        new js.com.cs.v4.Time.DelayedCall(ss.Delegate.create(this, this._refreshInitialValue$4), 250, this.get__cmbDay$4().get_value()).invoke();
    },
    
    _initHandlers$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_initHandlers$4() {
        this.get__cmbMonth$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._cmbMonth_OnChangeEvenWithKeys$4));
        this.get__cmbYear$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._cmbYear_OnChangeEvenWithKeys$4));
        this.get__cmbDay$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._cmbDay_OnChangeEvenWithKeys$4));
        this.get__cmbDay$4().add_onFocus(ss.Delegate.create(this, this._cmbDay_onFocus$4));
        this.get__cmbMonth$4().add_onFocus(ss.Delegate.create(this, this._cmbMonth_onFocus$4));
        this.get__cmbYear$4().add_onFocus(ss.Delegate.create(this, this._cmbYear_onFocus$4));
        this.get__cmbDay$4().add_onBlur(ss.Delegate.create(this, this._onBlurElement$4));
        this.get__cmbMonth$4().add_onBlur(ss.Delegate.create(this, this._onBlurElement$4));
        this.get__cmbYear$4().add_onBlur(ss.Delegate.create(this, this._onBlurElement$4));
    },
    
    _onBlurElement$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_onBlurElement$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.get_valueObjectDate() !== null) {
            this.onBlur();
        }
        else {
            if (this._focusedOnDay$4 && this._focusedOnMonth$4 && this._focusedOnYear$4) {
                this.onBlur();
            }
        }
    },
    
    _cmbYear_onFocus$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_cmbYear_onFocus$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._focusedOnYear$4 = true;
        this.onFocus();
    },
    
    _cmbMonth_onFocus$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_cmbMonth_onFocus$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._focusedOnMonth$4 = true;
        this.onFocus();
    },
    
    _cmbDay_onFocus$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_cmbDay_onFocus$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._focusedOnDay$4 = true;
        this.onFocus();
    },
    
    _triggerOnChange$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_triggerOnChange$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onChange$4 != null) {
            this.__onChange$4(e);
        }
    },
    
    _cmbDay_OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_cmbDay_OnChangeEvenWithKeys$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._triggerOnChange$4(e);
    },
    
    _cmbYear_OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_cmbYear_OnChangeEvenWithKeys$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._updateDayValues$4();
        this._triggerOnChange$4(e);
    },
    
    _cmbMonth_OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_cmbMonth_OnChangeEvenWithKeys$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._updateDayValues$4();
        this._triggerOnChange$4(e);
    },
    
    _getCombobox$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_getCombobox$4(cssClass, index) {
        /// <param name="cssClass" type="String">
        /// </param>
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v4.Controls.Form.MyDropDownList"></returns>
        var jSelect = js.com.JQueryScriptSharpV2.jQueryUtil.select('.cssClass', this.get_element().get_element());
        if (!jSelect.length) {
            jSelect = js.com.JQueryScriptSharpV2.jQueryUtil.select('select', this.get_element().get_element());
            if (jSelect.length > index) {
                jSelect = jSelect.eq(index);
            }
            else {
                throw new Error("Cannot load 3 date combobox either with css class '" + cssClass + "' or index '" + index + "'");
            }
        }
        return new js.com.cs.v4.Controls.Form.MyDropDownList(jSelect);
    },
    
    _initControls$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_initControls$4() {
    },
    
    get_myElement: function js_com_cs_v4_UI_Forms_FieldDate3Combos$get_myElement() {
        /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
        return js.com.cs.v4.UI.Forms.FieldDate3Combos.callBaseMethod(this, 'get_element');
    },
    
    get_controlType: function js_com_cs_v4_UI_Forms_FieldDate3Combos$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.date3Combo;
    },
    
    enable: function js_com_cs_v4_UI_Forms_FieldDate3Combos$enable() {
        this.get__cmbDay$4().enable();
        this.get__cmbMonth$4().enable();
        this.get__cmbYear$4().enable();
    },
    
    disable: function js_com_cs_v4_UI_Forms_FieldDate3Combos$disable() {
        this.get__cmbDay$4().disable();
        this.get__cmbMonth$4().disable();
        this.get__cmbYear$4().disable();
    },
    
    focus: function js_com_cs_v4_UI_Forms_FieldDate3Combos$focus() {
        /// <returns type="Boolean"></returns>
        return this.get__cmbDay$4().focus();
    },
    
    blur: function js_com_cs_v4_UI_Forms_FieldDate3Combos$blur() {
        /// <returns type="Boolean"></returns>
        return this.get__cmbDay$4().blur() || this.get__cmbMonth$4().blur() || this.get__cmbYear$4().blur();
    },
    
    getFieldFromFormsCollection: function js_com_cs_v4_UI_Forms_FieldDate3Combos$getFieldFromFormsCollection() {
        /// <returns type="js.com.cs.v4.UI.Forms.Field"></returns>
        return this;
    },
    
    add_onChange: function js_com_cs_v4_UI_Forms_FieldDate3Combos$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange$4 = ss.Delegate.combine(this.__onChange$4, value);
    },
    remove_onChange: function js_com_cs_v4_UI_Forms_FieldDate3Combos$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange$4 = ss.Delegate.remove(this.__onChange$4, value);
    },
    
    __onChange$4: null,
    
    _getValue$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_getValue$4() {
        /// <returns type="Date"></returns>
        var day = parseInt(this.get__cmbDay$4().get_value());
        var month = parseInt(this.get__cmbMonth$4().get_value());
        var year = parseInt(this.get__cmbYear$4().get_value());
        if (!isNaN(day) && !isNaN(month) && !isNaN(year) && !!day && !!month && !!year) {
            return new Date(year, (month - 1), day);
        }
        else {
            return null;
        }
    },
    
    _updateDayValues$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_updateDayValues$4() {
        var currSelectedDayValue = this.get__cmbDay$4().get_value();
        var oMonth = parseInt(this.get__cmbMonth$4().get_value());
        var oYear = parseInt(this.get__cmbYear$4().get_value());
        var daysInMonth = 31;
        if (!isNaN(oMonth) && !isNaN(oYear)) {
            var month = oMonth;
            var year = oYear;
            daysInMonth = js.com.cs.v4.Util.DateUtil.getDaysOfMonth(month, year);
        }
        this.get__cmbDay$4().clearItems();
        if (!String.isNullOrEmpty(this._parameters$4.unselectedTextDay)) {
            this.get__cmbDay$4().addItem(this._parameters$4.unselectedTextDay, '');
        }
        for (var i = 1; i <= daysInMonth; i++) {
            this.get__cmbDay$4().addItem(js.com.cs.v4.Util.StringUtil.padNumber(i, 2, '0', true), i.toString());
        }
        this.get__cmbDay$4().set_value(currSelectedDayValue);
    },
    
    _refreshInitialValue$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_refreshInitialValue$4(initialValue) {
        /// <param name="initialValue" type="String">
        /// </param>
        this.get__cmbDay$4().set_value(initialValue);
    },
    
    _setValue$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$_setValue$4(date) {
        /// <param name="date" type="Date">
        /// </param>
        if (date !== null && date >= this._parameters$4.showDateFrom && date <= this._parameters$4.showDateTo) {
            this.get__cmbYear$4().set_value(date.getFullYear().toString());
            this.get__cmbMonth$4().set_value(date.getMonth().toString());
            this._updateDayValues$4();
            this.get__cmbDay$4().set_value(date.getDate().toString());
        }
    },
    
    get_valueObjectDate: function js_com_cs_v4_UI_Forms_FieldDate3Combos$get_valueObjectDate() {
        /// <value type="Date"></value>
        return this._getValue$4();
    },
    set_valueObjectDate: function js_com_cs_v4_UI_Forms_FieldDate3Combos$set_valueObjectDate(value) {
        /// <value type="Date"></value>
        this._setValue$4(value);
        return value;
    },
    
    getValueObject: function js_com_cs_v4_UI_Forms_FieldDate3Combos$getValueObject() {
        /// <returns type="Object"></returns>
        return this.get_valueObjectDate();
    },
    
    setValueObject: function js_com_cs_v4_UI_Forms_FieldDate3Combos$setValueObject(value) {
        /// <param name="value" type="Object">
        /// </param>
        if (Type.canCast(value, Date) || value == null) {
            this.set_valueObjectDate(value);
        }
        else {
            throw new Error('Value must be of type DateTime');
        }
    },
    
    getAjaxCustomValidationValue: function js_com_cs_v4_UI_Forms_FieldDate3Combos$getAjaxCustomValidationValue() {
        /// <returns type="String"></returns>
        return js.com.cs.v4.Util.DateUtil.dateToISO8601String(this.get_valueObjectDate(), false);
    },
    
    add__OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$add__OnChangeEvenWithKeys$4(value) {
        /// <param name="value" type="Function" />
        this.___OnChangeEvenWithKeys$4 = ss.Delegate.combine(this.___OnChangeEvenWithKeys$4, value);
    },
    remove__OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldDate3Combos$remove__OnChangeEvenWithKeys$4(value) {
        /// <param name="value" type="Function" />
        this.___OnChangeEvenWithKeys$4 = ss.Delegate.remove(this.___OnChangeEvenWithKeys$4, value);
    },
    
    ___OnChangeEvenWithKeys$4: null,
    
    add_onChangeEvenWithKeys: function js_com_cs_v4_UI_Forms_FieldDate3Combos$add_onChangeEvenWithKeys(value) {
        /// <param name="value" type="Function" />
        this.add__OnChangeEvenWithKeys$4(value);
        this._initOnChangeEventWithKeysHandler$4();
    },
    remove_onChangeEvenWithKeys: function js_com_cs_v4_UI_Forms_FieldDate3Combos$remove_onChangeEvenWithKeys(value) {
        /// <param name="value" type="Function" />
        this.remove__OnChangeEvenWithKeys$4(value);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldDate3CombosParams

js.com.cs.v4.UI.Forms.FieldDate3CombosParams = function js_com_cs_v4_UI_Forms_FieldDate3CombosParams() {
    /// <field name="showDateFrom" type="Date">
    /// </field>
    /// <field name="showDateTo" type="Date">
    /// </field>
    /// <field name="unselectedTextDay" type="String">
    /// </field>
    /// <field name="unselectedTextMonth" type="String">
    /// </field>
    /// <field name="unselectedTextYear" type="String">
    /// </field>
}
js.com.cs.v4.UI.Forms.FieldDate3CombosParams.prototype = {
    showDateFrom: null,
    showDateTo: null,
    unselectedTextDay: '--',
    unselectedTextMonth: '--',
    unselectedTextYear: '----'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldInputConstraint

js.com.cs.v4.UI.Forms.FieldInputConstraint = function js_com_cs_v4_UI_Forms_FieldInputConstraint(field, validationParams) {
    /// <param name="field" type="js.com.cs.v4.UI.Forms.Field">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <field name="_field" type="js.com.cs.v4.UI.Forms.Field">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </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.v4.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_v4_UI_Forms_FieldInputConstraint$_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.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_v4_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_v4_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_v4_UI_Forms_FieldInputConstraint$_onChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var newValue = this._field.get_valueObject();
        if (!String.isNullOrEmpty(newValue)) {
            var isCharactersUnallowed = false;
            var isPatternAllowed = true;
            if (!ss.isNullOrUndefined(this._regExpUnAllowedChars)) {
                isCharactersUnallowed = this._regExpUnAllowedChars.test(newValue);
            }
            if (!ss.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 = js.com.cs.v4.Util.StringUtil.getWords(this._field.get_valueObject().toString()).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_v4_UI_Forms_FieldInputConstraint$_initHandlers() {
        if (Type.canCast(this._field, js.com.cs.v4.UI.Forms.FieldSingleItem)) {
            this._field.get_element().add_onKeyUp(ss.Delegate.create(this, this._onChange));
            this._onChange(null);
            this._field.get_element().add_onBlur(ss.Delegate.create(this, this._onBlur));
            this._onBlur(null);
        }
    },
    
    _init: function js_com_cs_v4_UI_Forms_FieldInputConstraint$_init() {
        this._initRegExp();
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldMediaItem

js.com.cs.v4.UI.Forms.FieldMediaItem = function js_com_cs_v4_UI_Forms_FieldMediaItem(element, title, ValidationParams, customCSSClasses) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="ValidationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    js.com.cs.v4.UI.Forms.FieldMediaItem.initializeBase(this, [ element, title, ValidationParams, customCSSClasses ]);
}
js.com.cs.v4.UI.Forms.FieldMediaItem.prototype = {
    
    get_formElement: function js_com_cs_v4_UI_Forms_FieldMediaItem$get_formElement() {
        /// <value type="js.com.cs.v4.Controls.Form.IMyBaseFormElement"></value>
        if (this._formElement == null) {
            this._formElement = new js.com.cs.v4.Controls.Form.MyFileUpload(this.get_element().get_element());
        }
        return js.com.cs.v4.UI.Forms.FieldMediaItem.callBaseMethod(this, 'get_formElement');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldPhoneNumber

js.com.cs.v4.UI.Forms.FieldPhoneNumber = function js_com_cs_v4_UI_Forms_FieldPhoneNumber(elementContainer, title, ValidationParams, customCSSClasses, parameters) {
    /// <param name="elementContainer" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="ValidationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v4.UI.Forms.FieldPhoneNumberParams">
    /// </param>
    /// <field name="__cmbInternationalCode$4" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="__txtPhoneNumber$4" type="js.com.cs.v4.Controls.Form.MyTextBoxSingleLine">
    /// </field>
    /// <field name="_parameters$4" type="js.com.cs.v4.UI.Forms.FieldPhoneNumberParams">
    /// </field>
    /// <field name="_onChangeEvenWithKeysInitialisedPhoneNumber$4" type="Boolean">
    /// </field>
    /// <field name="_onChangeEvenWithKeysInitialisedInternationalCode$4" type="Boolean">
    /// </field>
    /// <field name="__onChange$4" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    /// <field name="___OnChangeEvenWithKeys$4" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldPhoneNumber.initializeBase(this, [ elementContainer, title, ValidationParams, customCSSClasses ]);
    this._parameters$4 = parameters;
    this._init$4();
}
js.com.cs.v4.UI.Forms.FieldPhoneNumber.prototype = {
    __cmbInternationalCode$4: null,
    __txtPhoneNumber$4: null,
    
    get__cmbInternationalCode$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$get__cmbInternationalCode$4() {
        /// <value type="js.com.cs.v4.Controls.Form.MyDropDownList"></value>
        if (this.__cmbInternationalCode$4 == null) {
            this.__cmbInternationalCode$4 = new js.com.cs.v4.Controls.Form.MyDropDownList(js.com.JQueryScriptSharpV2.jQueryUtil.select('select', this.get_element().get_element()));
            this._initOnChangeEventWithKeysHandler$4();
        }
        return this.__cmbInternationalCode$4;
    },
    
    get__txtPhoneNumber$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$get__txtPhoneNumber$4() {
        /// <value type="js.com.cs.v4.Controls.Form.MyTextBoxSingleLine"></value>
        if (this.__txtPhoneNumber$4 == null) {
            this.__txtPhoneNumber$4 = new js.com.cs.v4.Controls.Form.MyTextBoxSingleLine(js.com.JQueryScriptSharpV2.jQueryUtil.select("input[type='text']", this.get_element().get_element()));
            this._initOnChangeEventWithKeysHandler$4();
        }
        return this.__txtPhoneNumber$4;
    },
    
    _parameters$4: null,
    _onChangeEvenWithKeysInitialisedPhoneNumber$4: false,
    _onChangeEvenWithKeysInitialisedInternationalCode$4: false,
    
    getCssControls: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$getCssControls() {
        /// <returns type="Array" elementType="MyElement"></returns>
        this._initControls$4();
        var elems = [];
        elems[0] = this.get__cmbInternationalCode$4();
        elems[1] = this.get__txtPhoneNumber$4();
        return elems;
    },
    
    _initOnChangeEventWithKeysHandler$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_initOnChangeEventWithKeysHandler$4() {
        if (this.___OnChangeEvenWithKeys$4 != null) {
            if (!this._onChangeEvenWithKeysInitialisedInternationalCode$4 && this.get__cmbInternationalCode$4() != null) {
                this._onChangeEvenWithKeysInitialisedInternationalCode$4 = true;
                this.get__cmbInternationalCode$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._onControlChangedWithKeys$4));
            }
            if (!this._onChangeEvenWithKeysInitialisedPhoneNumber$4 && this.get__txtPhoneNumber$4() != null) {
                this._onChangeEvenWithKeysInitialisedPhoneNumber$4 = true;
                this.get__txtPhoneNumber$4().add_onChangeEvenWithKeys(ss.Delegate.create(this, this._onControlChangedWithKeys$4));
            }
        }
    },
    
    _onControlChangedWithKeys$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_onControlChangedWithKeys$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.___OnChangeEvenWithKeys$4 != null) {
            this.___OnChangeEvenWithKeys$4(e);
        }
    },
    
    _init$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_init$4() {
        this._initControls$4();
        this._initHandlers$4();
    },
    
    _initHandlers$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_initHandlers$4() {
        this.get__txtPhoneNumber$4().add_onFocus(ss.Delegate.create(this, this._txtPhoneNumber_onFocus$4));
        this.get__txtPhoneNumber$4().add_onBlur(ss.Delegate.create(this, this._txtPhoneNumber_onBlur$4));
    },
    
    _txtPhoneNumber_onBlur$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_txtPhoneNumber_onBlur$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.onBlur();
    },
    
    _txtPhoneNumber_onFocus$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_txtPhoneNumber_onFocus$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.onFocus();
    },
    
    _initControls$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$_initControls$4() {
    },
    
    get_myElement: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$get_myElement() {
        /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
        return js.com.cs.v4.UI.Forms.FieldPhoneNumber.callBaseMethod(this, 'get_element');
    },
    
    get_controlType: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$get_controlType() {
        /// <value type="js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v4.Controls.Form.Enums.FORM_CONTROL_TYPE.phoneNumber;
    },
    
    enable: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$enable() {
        this.get__cmbInternationalCode$4().enable();
        this.get__txtPhoneNumber$4().enable();
    },
    
    disable: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$disable() {
        this.get__cmbInternationalCode$4().disable();
        this.get__txtPhoneNumber$4().disable();
    },
    
    focus: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$focus() {
        /// <returns type="Boolean"></returns>
        return this.get__txtPhoneNumber$4().focus();
    },
    
    blur: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$blur() {
        /// <returns type="Boolean"></returns>
        return this.get__txtPhoneNumber$4().blur() || this.get__cmbInternationalCode$4().blur();
    },
    
    getFieldFromFormsCollection: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$getFieldFromFormsCollection() {
        /// <returns type="js.com.cs.v4.UI.Forms.Field"></returns>
        return this;
    },
    
    add_onChange: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange$4 = ss.Delegate.combine(this.__onChange$4, value);
    },
    remove_onChange: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange$4 = ss.Delegate.remove(this.__onChange$4, value);
    },
    
    __onChange$4: null,
    
    get_valueObjectIncludingInternationalCode: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$get_valueObjectIncludingInternationalCode() {
        /// <value type="String"></value>
        this._initControls$4();
        if (!String.isNullOrEmpty(this.get__txtPhoneNumber$4().get_value())) {
            return this._parameters$4.internationalCountryCodePrefix + this.get__cmbInternationalCode$4().get_value() + this._parameters$4.internationalCountryCodeSuffix + this.get__txtPhoneNumber$4().get_value();
        }
        else {
            return null;
        }
    },
    set_valueObjectIncludingInternationalCode: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$set_valueObjectIncludingInternationalCode(value) {
        /// <value type="String"></value>
        this._initControls$4();
        var sVal = (this.get_valueObject() == null) ? '' : this.get_valueObject().toString();
        var parts = sVal.split(this._parameters$4.internationalCountryCodeSuffix);
        var sCountryCode = parts[0];
        var sPhone = parts[1];
        this.get__cmbInternationalCode$4().set_value(sCountryCode);
        this.get__txtPhoneNumber$4().set_value(sPhone);
        return value;
    },
    
    getValueObject: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$getValueObject() {
        /// <returns type="Object"></returns>
        return this.get_valueObjectIncludingInternationalCode();
    },
    
    setValueObject: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$setValueObject(value) {
        /// <param name="value" type="Object">
        /// </param>
        this.set_valueObjectIncludingInternationalCode((value == null) ? '' : value.toString());
    },
    
    getAjaxCustomValidationValue: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$getAjaxCustomValidationValue() {
        /// <returns type="String"></returns>
        return this.get_valueObjectIncludingInternationalCode();
    },
    
    add__OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$add__OnChangeEvenWithKeys$4(value) {
        /// <param name="value" type="Function" />
        this.___OnChangeEvenWithKeys$4 = ss.Delegate.combine(this.___OnChangeEvenWithKeys$4, value);
    },
    remove__OnChangeEvenWithKeys$4: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$remove__OnChangeEvenWithKeys$4(value) {
        /// <param name="value" type="Function" />
        this.___OnChangeEvenWithKeys$4 = ss.Delegate.remove(this.___OnChangeEvenWithKeys$4, value);
    },
    
    ___OnChangeEvenWithKeys$4: null,
    
    add_onChangeEvenWithKeys: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$add_onChangeEvenWithKeys(value) {
        /// <param name="value" type="Function" />
        this.add__OnChangeEvenWithKeys$4(value);
        this._initOnChangeEventWithKeysHandler$4();
    },
    remove_onChangeEvenWithKeys: function js_com_cs_v4_UI_Forms_FieldPhoneNumber$remove_onChangeEvenWithKeys(value) {
        /// <param name="value" type="Function" />
        this.remove__OnChangeEvenWithKeys$4(value);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldPhoneNumberParams

js.com.cs.v4.UI.Forms.FieldPhoneNumberParams = function js_com_cs_v4_UI_Forms_FieldPhoneNumberParams() {
    /// <field name="internationalCountryCodeSuffix" type="String">
    /// </field>
    /// <field name="internationalCountryCodePrefix" type="String">
    /// </field>
}
js.com.cs.v4.UI.Forms.FieldPhoneNumberParams.prototype = {
    internationalCountryCodeSuffix: '-',
    internationalCountryCodePrefix: '+'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldSingleItem

js.com.cs.v4.UI.Forms.FieldSingleItem = function js_com_cs_v4_UI_Forms_FieldSingleItem(element, title, ValidationParams, customCSSClasses) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="ValidationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <field name="_formElement" type="js.com.cs.v4.Controls.Form.IMyBaseFormElement">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldSingleItem.initializeBase(this, [ element, title, ValidationParams, customCSSClasses ]);
    this._init$4();
}
js.com.cs.v4.UI.Forms.FieldSingleItem.prototype = {
    _formElement: null,
    
    get_formElement: function js_com_cs_v4_UI_Forms_FieldSingleItem$get_formElement() {
        /// <value type="js.com.cs.v4.Controls.Form.IMyBaseFormElement"></value>
        if (this._formElement == null) {
            this._formElement = js.com.cs.v4.Controls.Form.MyBaseFormElement.getFormElement(this.get_element().get_element());
        }
        if (this._formElement == null) {
            alert("Form Element for item with ID '" + this.id + "' is not found!");
        }
        return this._formElement;
    },
    
    _init$4: function js_com_cs_v4_UI_Forms_FieldSingleItem$_init$4() {
        this._initHandlers$4();
        js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._initDatePicker$4));
        js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._initMultiSelect$4));
    },
    
    _initHandlers$4: function js_com_cs_v4_UI_Forms_FieldSingleItem$_initHandlers$4() {
        this.get_element().add_onFocus(ss.Delegate.create(this, this._element_onFocus$4));
        this.get_element().add_onBlur(ss.Delegate.create(this, this._element_onBlur$4));
    },
    
    _element_onBlur$4: function js_com_cs_v4_UI_Forms_FieldSingleItem$_element_onBlur$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.onBlur();
    },
    
    _element_onFocus$4: function js_com_cs_v4_UI_Forms_FieldSingleItem$_element_onFocus$4(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.onFocus();
    },
    
    get_disabled: function js_com_cs_v4_UI_Forms_FieldSingleItem$get_disabled() {
        /// <value type="Boolean"></value>
        return js.com.cs.v4.UI.Forms.FieldSingleItem.callBaseMethod(this, 'get_disabled');
    },
    set_disabled: function js_com_cs_v4_UI_Forms_FieldSingleItem$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.get_formElement().set_disabled(value);
        if (!value) {
            this.set_hasFocus(false);
        }
        js.com.cs.v4.UI.Forms.FieldSingleItem.callBaseMethod(this, 'set_disabled', [ value ]);
        return value;
    },
    
    get_readOnly: function js_com_cs_v4_UI_Forms_FieldSingleItem$get_readOnly() {
        /// <value type="Boolean"></value>
        return js.com.cs.v4.UI.Forms.FieldSingleItem.callBaseMethod(this, 'get_readOnly');
    },
    set_readOnly: function js_com_cs_v4_UI_Forms_FieldSingleItem$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this.get_formElement().get_myElement().set_readOnly(value);
        js.com.cs.v4.UI.Forms.FieldSingleItem.callBaseMethod(this, 'set_readOnly', [ value ]);
        return value;
    },
    
    getValueObject: function js_com_cs_v4_UI_Forms_FieldSingleItem$getValueObject() {
        /// <returns type="Object"></returns>
        return this.get_formElement().get_valueObject();
    },
    
    setValueObject: function js_com_cs_v4_UI_Forms_FieldSingleItem$setValueObject(value) {
        /// <param name="value" type="Object">
        /// </param>
        this.get_formElement().set_valueObject(value);
    },
    
    focus: function js_com_cs_v4_UI_Forms_FieldSingleItem$focus() {
        /// <returns type="Boolean"></returns>
        return this.get_formElement().focus();
    },
    
    blur: function js_com_cs_v4_UI_Forms_FieldSingleItem$blur() {
        /// <returns type="Boolean"></returns>
        return this.get_formElement().blur();
    },
    
    destroy: function js_com_cs_v4_UI_Forms_FieldSingleItem$destroy() {
        this.get_element().remove_onFocus(ss.Delegate.create(this, this._element_onFocus$4));
        this.get_element().remove_onBlur(ss.Delegate.create(this, this._element_onBlur$4));
        js.com.cs.v4.UI.Forms.FieldSingleItem.callBaseMethod(this, 'destroy');
    },
    
    _initDatePicker$4: function js_com_cs_v4_UI_Forms_FieldSingleItem$_initDatePicker$4() {
        if (this.get_validationParams().isDate && this.get_validationParams().jQueryUICalendarShowType !== js.com.cs.v4.Classes.Forms.Validation.SHOW_CALENDAR_TYPE.none) {
            try {
                var dpOptions = this.getDatePickerOptions();
                this._Element.get_jQueryElement().datepicker(dpOptions);
            }
            catch (ex) {
                js.com.cs.v4.Util.Console.log(ex.message);
            }
        }
    },
    
    _initMultiSelect$4: function js_com_cs_v4_UI_Forms_FieldSingleItem$_initMultiSelect$4() {
        if ((this.get_element() != null && this.get_element().get_tagName() != null && this.get_element().get_tagName().toLowerCase() === 'select') && this.get_validationParams().showJQueryMultiSelect) {
            try {
                var dpOptions = this.getMultiSelectOptions();
                this._Element.get_jQueryElement().multiselect(dpOptions);
            }
            catch (ex) {
                js.com.cs.v4.Util.Console.log(ex.message);
            }
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldSubGroup

js.com.cs.v4.UI.Forms.FieldSubGroup = function js_com_cs_v4_UI_Forms_FieldSubGroup(fieldIDs, groupParams, validationGroup) {
    /// <param name="fieldIDs" type="Array" elementType="String">
    /// </param>
    /// <param name="groupParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="_parameters" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="hasError" type="Boolean">
    /// </field>
    /// <field name="form" type="js.com.cs.v4.UI.Forms.Form">
    /// </field>
    /// <field name="_fieldIDs" type="Array" elementType="String">
    /// </field>
    /// <field name="_fields" type="Array" elementType="Field">
    /// </field>
    this.id = groupParams.groupID;
    this._parameters = groupParams;
    this._fields = [];
    this._fieldIDs = fieldIDs;
    this.validationGroup = validationGroup;
    this._init();
}
js.com.cs.v4.UI.Forms.FieldSubGroup.prototype = {
    id: null,
    _parameters: null,
    validationGroup: null,
    hasError: false,
    form: null,
    _fieldIDs: null,
    _fields: null,
    
    get_parameters: function js_com_cs_v4_UI_Forms_FieldSubGroup$get_parameters() {
        /// <value type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams"></value>
        return this._parameters;
    },
    
    get_fields: function js_com_cs_v4_UI_Forms_FieldSubGroup$get_fields() {
        /// <value type="Array" elementType="Field"></value>
        return this._fields;
    },
    
    _initGroupWithForm: function js_com_cs_v4_UI_Forms_FieldSubGroup$_initGroupWithForm() {
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().addGroup(this);
    },
    
    _initFields: function js_com_cs_v4_UI_Forms_FieldSubGroup$_initFields() {
        for (var i = 0; i < this._fieldIDs.length; i++) {
            this.addFieldToGroup(this._fieldIDs[i]);
        }
    },
    
    _init: function js_com_cs_v4_UI_Forms_FieldSubGroup$_init() {
        this._initFields();
        this._initGroupWithForm();
    },
    
    _hasFieldsGotError: function js_com_cs_v4_UI_Forms_FieldSubGroup$_hasFieldsGotError() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this.get_fields().length; i++) {
            if (this.get_fields()[i].get_hasError()) {
                return true;
            }
        }
        return false;
    },
    
    _getFieldsString: function js_com_cs_v4_UI_Forms_FieldSubGroup$_getFieldsString() {
        /// <returns type="String"></returns>
        var fieldsStr = '';
        for (var i = 0; i < this.get_fields().length; i++) {
            var f = this.get_fields()[i];
            if (i > 0) {
                if (i === this.get_fields().length - 1) {
                    fieldsStr += ' & ';
                }
                else {
                    fieldsStr += ', ';
                }
            }
            fieldsStr += f.title;
        }
        return fieldsStr;
    },
    
    _isAtLeastOneFieldFilled: function js_com_cs_v4_UI_Forms_FieldSubGroup$_isAtLeastOneFieldFilled() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this.get_fields().length; i++) {
            if (!this.get_fields()[i].isEmpty()) {
                return true;
            }
        }
        return false;
    },
    
    _setAllFieldsErrorOrSuccess: function js_com_cs_v4_UI_Forms_FieldSubGroup$_setAllFieldsErrorOrSuccess(errMsg) {
        /// <param name="errMsg" type="String">
        /// </param>
        var status = (errMsg == null) ? js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success : js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error;
        for (var i = 0; i < this.get_fields().length; i++) {
            if (!this.get_fields()[i].isEmpty()) {
                this.get_fields()[i].set_fieldValidationStatus(new js.com.cs.v4.UI.Forms.FieldValidationResult(status, errMsg));
            }
        }
    },
    
    _validateAtLeastOneRequired: function js_com_cs_v4_UI_Forms_FieldSubGroup$_validateAtLeastOneRequired() {
        /// <returns type="js.com.cs.v4.UI.Forms.FormError"></returns>
        if (!this._isAtLeastOneFieldFilled()) {
            var errMsg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().atLeastOneIsRequired.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELDS, this._getFieldsString());
            this._setAllFieldsErrorOrSuccess(errMsg);
            return new js.com.cs.v4.UI.Forms.FormError(this, new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error, errMsg));
        }
        return null;
    },
    
    _validateAllSameValues: function js_com_cs_v4_UI_Forms_FieldSubGroup$_validateAllSameValues() {
        /// <returns type="js.com.cs.v4.UI.Forms.FormError"></returns>
        var value = null;
        for (var i = 0; i < this.get_fields().length; i++) {
            var f = this.get_fields()[i];
            if (value == null) {
                value = f.get_valueObject();
            }
            else {
                if (f.get_valueObject() !== value) {
                    var errMsg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().sameValuesRequired.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELDS, this._getFieldsString());
                    this._setAllFieldsErrorOrSuccess(errMsg);
                    return new js.com.cs.v4.UI.Forms.FormError(this, new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error, errMsg));
                }
            }
        }
        return null;
    },
    
    areAllFieldsIndependentlyValid: function js_com_cs_v4_UI_Forms_FieldSubGroup$areAllFieldsIndependentlyValid() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this.get_fields().length; i++) {
            var f = this.get_fields()[i];
            if (f.isCheckingAJAXValidation()) {
                return false;
            }
            else {
                var result = f.validate(true, false, true);
                if (result != null && (result.isError() || result.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.waitingForAJAX)) {
                    return false;
                }
            }
        }
        return true;
    },
    
    haveAllFieldsLostFocusAtLeastOnce: function js_com_cs_v4_UI_Forms_FieldSubGroup$haveAllFieldsLostFocusAtLeastOnce() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this.get_fields().length; i++) {
            var f = this.get_fields()[i];
            if (!f.get_hasLostFocusAtLeastOnce()) {
                return false;
            }
        }
        return true;
    },
    
    validate: function js_com_cs_v4_UI_Forms_FieldSubGroup$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">
        /// Validate even if fields already have some error
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.FormError"></returns>
        var errs = new js.com.cs.v4.Classes.General.Arrays.MyArray();
        if (!validateEvenIfFieldsAlreadyHaveError) {
            if (this._hasFieldsGotError()) {
                return null;
            }
        }
        var fieldsStr = this._getFieldsString();
        var err = null;
        if (this.get_parameters().groupType === js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE.atLeastOneRequired) {
            err = this._validateAtLeastOneRequired();
        }
        else if (this.get_parameters().groupType === js.com.cs.v4.Classes.Forms.Validation.FIELD_SUBGROUP_TYPE.sameValues) {
            err = this._validateAllSameValues();
        }
        if (err != null && focusOnFirstErrorField && this.get_fields().length > 0) {
            if (!this.get_fields()[0].get_hasFocus()) {
                this.get_fields()[0].focus();
                this.get_fields()[0].set_hasFocus(true);
            }
        }
        if (err == null) {
            this._setAllFieldsErrorOrSuccess(null);
        }
        return err;
    },
    
    addFieldToGroup: function js_com_cs_v4_UI_Forms_FieldSubGroup$addFieldToGroup(fieldID) {
        /// <param name="fieldID" type="String">
        /// </param>
        if (!(Type.canCast(fieldID, String))) {
            if (Type.canCast(fieldID, js.com.cs.v4.UI.Forms.FieldBase)) {
                fieldID = (fieldID).id;
            }
            else {
                fieldID = (fieldID).id;
            }
        }
        var f = js.com.cs.v4.UI.Forms.FormsCollection.get_instance().getFieldByID(fieldID);
        if (f == null) {
            throw new Error("Field with id '" + fieldID + "' not found");
        }
        this.get_fields()[this.get_fields().length] = f;
        f.validationSubGroups[f.validationSubGroups.length] = this;
    },
    
    toString: function js_com_cs_v4_UI_Forms_FieldSubGroup$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldGroup - ' + this.id + ' (' + this.get_fields().length + ' fields)]';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldValidationIcon

js.com.cs.v4.UI.Forms.FieldValidationIcon = function js_com_cs_v4_UI_Forms_FieldValidationIcon(cssClasses) {
    /// <param name="cssClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </param>
    /// <field name="cssClasses" type="js.com.cs.v4.UI.Forms.FieldCSSClasses">
    /// </field>
    /// <field name="_errMsg$2" type="String">
    /// </field>
    /// <field name="_hasError$2" type="Boolean">
    /// </field>
    js.com.cs.v4.UI.Forms.FieldValidationIcon.initializeBase(this);
    if (ss.isNullOrUndefined(cssClasses)) {
        cssClasses = js.com.cs.v4.UI.Forms.FieldCSSClasses.get_Instance();
    }
    this.cssClasses = cssClasses;
    this.showDim();
}
js.com.cs.v4.UI.Forms.FieldValidationIcon.prototype = {
    cssClasses: null,
    _errMsg$2: null,
    _hasError$2: false,
    
    _removeClasses$2: function js_com_cs_v4_UI_Forms_FieldValidationIcon$_removeClasses$2() {
        this.removeClass(this.cssClasses.cssClassValidationIconDim, this.cssClasses.cssClassValidationIconError, this.cssClasses.cssClassValidationIconSuccess, this.cssClasses.cssClassValidationIconLoading);
    },
    
    _showClass$2: function js_com_cs_v4_UI_Forms_FieldValidationIcon$_showClass$2(cssClass) {
        /// <param name="cssClass" type="String">
        /// </param>
        this._removeClasses$2();
        this.addClass(cssClass);
    },
    
    showError: function js_com_cs_v4_UI_Forms_FieldValidationIcon$showError(errorMsg) {
        /// <param name="errorMsg" type="String">
        /// </param>
        this._errMsg$2 = errorMsg;
        this._hasError$2 = true;
        this._showClass$2(this.cssClasses.cssClassValidationIconError);
    },
    
    showLoading: function js_com_cs_v4_UI_Forms_FieldValidationIcon$showLoading() {
        this._hasError$2 = false;
        this._showClass$2(this.cssClasses.cssClassValidationIconLoading);
    },
    
    showSuccess: function js_com_cs_v4_UI_Forms_FieldValidationIcon$showSuccess() {
        this._hasError$2 = false;
        this._showClass$2(this.cssClasses.cssClassValidationIconSuccess);
    },
    
    showDim: function js_com_cs_v4_UI_Forms_FieldValidationIcon$showDim() {
        this._hasError$2 = false;
        this._showClass$2(this.cssClasses.cssClassValidationIconDim);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldValidatorTexts

js.com.cs.v4.UI.Forms.FieldValidatorTexts = function js_com_cs_v4_UI_Forms_FieldValidatorTexts() {
    /// <field name="_INSTANCE" type="js.com.cs.v4.UI.Forms.FieldValidatorTexts" static="true">
    /// </field>
    /// <field name="taG_FIELD" type="String" static="true">
    /// </field>
    /// <field name="taG_FIELDS" type="String" static="true">
    /// </field>
    /// <field name="taG_LENGTH" type="String" static="true">
    /// </field>
    /// <field name="taG_VALUE" type="String" static="true">
    /// </field>
    /// <field name="fieldRequired" type="String">
    /// </field>
    /// <field name="notValidEmail" type="String">
    /// </field>
    /// <field name="notValidAlphanumerical" type="String">
    /// </field>
    /// <field name="notValidIP" type="String">
    /// </field>
    /// <field name="notValidCreditCard" type="String">
    /// </field>
    /// <field name="notValidWebsite" type="String">
    /// </field>
    /// <field name="cannotContainLessThanCharRange" type="String">
    /// </field>
    /// <field name="cannotContainMoreThanCharRange" type="String">
    /// </field>
    /// <field name="cannotContainMoreThanWordsRange" type="String">
    /// </field>
    /// <field name="notValidFileExtension" type="String">
    /// </field>
    /// <field name="notValidValueIn" type="String">
    /// </field>
    /// <field name="caseSensitive" type="String">
    /// </field>
    /// <field name="invalidValue" type="String">
    /// </field>
    /// <field name="numberMustBeSmallerOrEqualToRange" type="String">
    /// </field>
    /// <field name="numberMustBeGreaterOrEqualToRange" type="String">
    /// </field>
    /// <field name="numberMustBeWithinRange" type="String">
    /// </field>
    /// <field name="numberMustBePositive" type="String">
    /// </field>
    /// <field name="numberMustBeNegative" type="String">
    /// </field>
    /// <field name="numberMustBeInteger" type="String">
    /// </field>
    /// <field name="numberNotValid" type="String">
    /// </field>
    /// <field name="dateMustBeBetweenRange" type="String">
    /// </field>
    /// <field name="dateMustBeBeforeRange" type="String">
    /// </field>
    /// <field name="dateMustBeAfterRange" type="String">
    /// </field>
    /// <field name="dateNotValid" type="String">
    /// </field>
    /// <field name="atLeastOneIsRequired" type="String">
    /// </field>
    /// <field name="sameValuesRequired" type="String">
    /// </field>
    /// <field name="waitingForAjaxToLoad" type="String">
    /// </field>
    /// <field name="passwordMustIncludeAlphabeticalCharacters" type="String">
    /// </field>
    /// <field name="passwordMustIncludeBothLowerAndUpperCase" type="String">
    /// </field>
    /// <field name="passwordMustIncludeAtLeastOneNumber" type="String">
    /// </field>
    /// <field name="passwordMustIncludeASpecialCharacter" type="String">
    /// </field>
    this.fieldRequired = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' is required';
    this.notValidEmail = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be a valid email address';
    this.notValidAlphanumerical = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must contain only alpha numerical characters i.e. letters, digits and underscore (_)';
    this.notValidIP = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be a valid IP address, e.g. 192.168.210.123';
    this.notValidCreditCard = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be a valid credit card number';
    this.notValidWebsite = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be a valid website URL';
    this.cannotContainLessThanCharRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' cannot contain less than ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH + ' character(s)';
    this.cannotContainMoreThanCharRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' cannot contain more than ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH + ' character(s)';
    this.cannotContainMoreThanWordsRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' cannot contain more than ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH + ' word(s)';
    this.notValidFileExtension = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be a file with one of the following extension(s): ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.notValidValueIn = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be one of: ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.invalidValue = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' - invalid value';
    this.numberMustBeSmallerOrEqualToRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be smaller than or equal to ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.numberMustBeGreaterOrEqualToRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be greater than or equal to ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.numberMustBeWithinRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be within the range ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.numberMustBePositive = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be positive';
    this.numberMustBeNegative = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be negative';
    this.numberMustBeInteger = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be a whole number';
    this.numberNotValid = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' - Invalid number';
    this.dateMustBeBetweenRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be between or equal to ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.dateMustBeBeforeRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be before or equal to ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.dateMustBeAfterRange = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' must be after or equal to ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.dateNotValid = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' - Invalid date.  Date must be in the format: ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE;
    this.atLeastOneIsRequired = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELDS + ' - At least one of the fields must be filled';
    this.sameValuesRequired = js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELDS + ' - Values does not match';
    this.waitingForAjaxToLoad = 'Please wait to finish validating ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD + ' with server';
}
js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance = function js_com_cs_v4_UI_Forms_FieldValidatorTexts$get_instance() {
    /// <value type="js.com.cs.v4.UI.Forms.FieldValidatorTexts"></value>
    if (js.com.cs.v4.UI.Forms.FieldValidatorTexts._INSTANCE == null) {
        js.com.cs.v4.UI.Forms.FieldValidatorTexts._INSTANCE = new js.com.cs.v4.UI.Forms.FieldValidatorTexts();
    }
    return js.com.cs.v4.UI.Forms.FieldValidatorTexts._INSTANCE;
}
js.com.cs.v4.UI.Forms.FieldValidatorTexts.updateTexts = function js_com_cs_v4_UI_Forms_FieldValidatorTexts$updateTexts(texts) {
    /// <param name="texts" type="js.com.cs.v4.UI.Forms.FieldValidatorTexts">
    /// </param>
    js.com.cs.v4.UI.Forms.FieldValidatorTexts._INSTANCE = texts;
}
js.com.cs.v4.UI.Forms.FieldValidatorTexts.prototype = {
    caseSensitive: '(case-sensitive)',
    passwordMustIncludeAlphabeticalCharacters: 'Password must include alphabetical characters',
    passwordMustIncludeBothLowerAndUpperCase: 'Password must include both lower and upper case letters',
    passwordMustIncludeAtLeastOneNumber: 'Password must include at least one number',
    passwordMustIncludeASpecialCharacter: 'Password must include at least one special characters (_ * ? ...)'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FieldValidator

js.com.cs.v4.UI.Forms.FieldValidator = function js_com_cs_v4_UI_Forms_FieldValidator(field, validationParams) {
    /// <param name="field" type="js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <field name="_field" type="js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </field>
    this._field = field;
    this._validationParams = validationParams;
}
js.com.cs.v4.UI.Forms.FieldValidator.prototype = {
    _field: null,
    _validationParams: null,
    
    _getErrorValidationResult: function js_com_cs_v4_UI_Forms_FieldValidator$_getErrorValidationResult(errMsg) {
        /// <param name="errMsg" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        var r = new js.com.cs.v4.UI.Forms.FieldValidationResult();
        r.status = js.com.cs.v4.UI.Forms.VALIDATION_STATUS.error;
        r.message = errMsg;
        return r;
    },
    
    validate: function js_com_cs_v4_UI_Forms_FieldValidator$validate() {
        /// <returns type="js.com.cs.v4.UI.Forms.FieldValidationResult"></returns>
        var title = this._field.title;
        if (this._validationParams.isRequired && this._field.isEmpty()) {
            return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().fieldRequired.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
        }
        if (!this._field.isEmpty()) {
            if (!js.com.cs.v4.Util.DOMUtil.isCheckbox(this._field.get_element()) && !js.com.cs.v4.Util.DOMUtil.isRadioButton(this._field.get_element())) {
                var value = this._field.get_valueObject();
                if (value == null) {
                    value = '';
                }
                var objErr = new js.com.cs.v4.Util.OUTPUT_ERROR_MSG();
                if (this._validationParams.isEmail) {
                    if (!js.com.cs.v4.Util.Validation.isEmail(value.toString())) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidEmail.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
                    }
                }
                else if (this._validationParams.isNumber) {
                    if (!js.com.cs.v4.Util.Validation.isNumber(value.toString(), this._validationParams, objErr, title)) {
                        return this._getErrorValidationResult(objErr.errorMessage);
                    }
                }
                else if (this._validationParams.isAlphaNumeric) {
                    if (!js.com.cs.v4.Util.Validation.isAlphaNumeric(value.toString())) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidAlphanumerical.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
                    }
                }
                else if (this._validationParams.isDate) {
                    if (!(Type.canCast(value, Date)) && !js.com.cs.v4.Util.Validation.isDate(value.toString(), this._validationParams, objErr, title)) {
                        return this._getErrorValidationResult(objErr.errorMessage);
                    }
                }
                else if (this._validationParams.isIPAddress) {
                    if (!js.com.cs.v4.Util.Validation.isIPAddress(value.toString())) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidIP.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
                    }
                }
                else if (this._validationParams.isCreditCardNumber) {
                    if (!js.com.cs.v4.Util.Validation.isCreditCardNumber(value.toString())) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidCreditCard.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
                    }
                }
                else if (this._validationParams.isWebsite) {
                    if (!js.com.cs.v4.Util.Validation.isWebsite(value.toString())) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidWebsite.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
                    }
                }
                if (this._validationParams.minLength > 0 || this._validationParams.maxLength > 0 || this._validationParams.maxWords > 0) {
                    if (this._validationParams.minLength > 0 && value.toString().length < this._validationParams.minLength) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().cannotContainLessThanCharRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH, this._validationParams.minLength.toString()));
                    }
                    if (this._validationParams.maxLength > 0 && value.toString().length > this._validationParams.maxLength) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().cannotContainMoreThanCharRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH, this._validationParams.maxLength.toString()));
                    }
                    if (this._validationParams.maxWords > 0 && js.com.cs.v4.Util.StringUtil.getWords(this._field.get_valueObject().toString()).length > this._validationParams.maxWords) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().cannotContainMoreThanWordsRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH, this._validationParams.maxWords.toString()));
                    }
                }
                if (!ss.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.v4.Util.StringUtil.trim(aExtensions[i]);
                        extension = extension.toLowerCase();
                        if (!ss.isNullOrUndefined(extension)) {
                            if (!extension.startsWith('.')) {
                                extension = '.' + extension;
                            }
                            var indexOf = value.toString().toLowerCase().indexOf(extension);
                            if (indexOf !== -1 && indexOf === (value.toString().length - extension.length)) {
                                found = true;
                                break;
                            }
                            if (i > 0) {
                                if (i < aExtensions.length - 1) {
                                    allowedExtensions += ', ';
                                }
                                else {
                                    allowedExtensions += ' or ';
                                }
                                many = true;
                            }
                            allowedExtensions += extension;
                        }
                    }
                    if (!found) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidFileExtension.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, allowedExtensions));
                    }
                }
                if (this._validationParams.valueIn != null && this._validationParams.valueIn.get_length() > 0) {
                    var found = js.com.cs.v4.Util.Validation.isValueIn(value.toString(), this._validationParams.valueIn, this._validationParams.valueRangeCaseSensitive);
                    if (!found) {
                        var valuesAllowed = this._validationParams.valueIn.join(', ');
                        var msg = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().notValidValueIn.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, valuesAllowed);
                        if (this._validationParams.valueRangeCaseSensitive) {
                            msg += ' ' + js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().caseSensitive;
                        }
                        return this._getErrorValidationResult(msg);
                    }
                }
                if (!ss.isNullOrUndefined(this._validationParams.regExpPattern)) {
                    var regExp = this._validationParams.regExpPattern;
                    var regExOk = this._validationParams.regExpPattern.test(value.toString());
                    if (!regExOk) {
                        return this._getErrorValidationResult(js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().invalidValue.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, title));
                    }
                }
            }
        }
        return new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.Form

js.com.cs.v4.UI.Forms.Form = function js_com_cs_v4_UI_Forms_Form(validationGroup) {
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="currentClickedButton" type="js.com.cs.v4.UI.Forms.Button">
    /// </field>
    /// <field name="_fields" type="Array" elementType="FieldBase">
    /// Array of Field
    /// </field>
    /// <field name="buttons" type="Array" elementType="Button">
    /// Array of Button
    /// </field>
    /// <field name="groups" type="Array" elementType="FieldSubGroup">
    /// Array of FieldGroup
    /// </field>
    /// <field name="__onPreValidation" type="js.com.cs.v4.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="__onPostValidation" type="js.com.cs.v4.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="__onSubmit" type="Action">
    /// </field>
    /// <field name="__onCustomSubmit" type="js.com.cs.v4.UI.Forms.FormValidationSubmitHandler">
    /// </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.v4.Controls.Common.MyFormElement">
    /// </field>
    this._fields = [];
    this.buttons = [];
    this.groups = [];
    this.validationGroup = validationGroup;
    this.init();
}
js.com.cs.v4.UI.Forms.Form.prototype = {
    validationGroup: null,
    currentClickedButton: null,
    _fields: null,
    
    get_fields: function js_com_cs_v4_UI_Forms_Form$get_fields() {
        /// <value type="Array" elementType="FieldBase"></value>
        if (this.validationGroup.indexOf('uploadformUploads') !== -1) {
        }
        return this._fields;
    },
    
    buttons: null,
    groups: null,
    
    add_onPreValidation: function js_com_cs_v4_UI_Forms_Form$add_onPreValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPreValidation = ss.Delegate.combine(this.__onPreValidation, value);
    },
    remove_onPreValidation: function js_com_cs_v4_UI_Forms_Form$remove_onPreValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPreValidation = ss.Delegate.remove(this.__onPreValidation, value);
    },
    
    __onPreValidation: null,
    
    add_onPostValidation: function js_com_cs_v4_UI_Forms_Form$add_onPostValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPostValidation = ss.Delegate.combine(this.__onPostValidation, value);
    },
    remove_onPostValidation: function js_com_cs_v4_UI_Forms_Form$remove_onPostValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPostValidation = ss.Delegate.remove(this.__onPostValidation, value);
    },
    
    __onPostValidation: null,
    
    add_onSubmit: function js_com_cs_v4_UI_Forms_Form$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.__onSubmit = ss.Delegate.combine(this.__onSubmit, value);
    },
    remove_onSubmit: function js_com_cs_v4_UI_Forms_Form$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.__onSubmit = ss.Delegate.remove(this.__onSubmit, value);
    },
    
    __onSubmit: null,
    
    add_onCustomSubmit: function js_com_cs_v4_UI_Forms_Form$add_onCustomSubmit(value) {
        /// <param name="value" type="Function" />
        this.__onCustomSubmit = ss.Delegate.combine(this.__onCustomSubmit, value);
    },
    remove_onCustomSubmit: function js_com_cs_v4_UI_Forms_Form$remove_onCustomSubmit(value) {
        /// <param name="value" type="Function" />
        this.__onCustomSubmit = ss.Delegate.remove(this.__onCustomSubmit, value);
    },
    
    __onCustomSubmit: null,
    
    add_onSubmitEvent: function js_com_cs_v4_UI_Forms_Form$add_onSubmitEvent(value) {
        /// <param name="value" type="Function" />
        this.__onSubmitEvent = ss.Delegate.combine(this.__onSubmitEvent, value);
    },
    remove_onSubmitEvent: function js_com_cs_v4_UI_Forms_Form$remove_onSubmitEvent(value) {
        /// <param name="value" type="Function" />
        this.__onSubmitEvent = ss.Delegate.remove(this.__onSubmitEvent, value);
    },
    
    __onSubmitEvent: null,
    _formFocused: false,
    _submitOnCtrlS: false,
    
    get_submitOnCtrlS: function js_com_cs_v4_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_v4_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_v4_UI_Forms_Form$_DefaultValidationHandler() {
        /// <returns type="Boolean"></returns>
        return true;
    },
    
    init: function js_com_cs_v4_UI_Forms_Form$init() {
        try {
        }
        catch (e) {
        }
        this._initKeyHandler();
    },
    
    _initKeyHandler: function js_com_cs_v4_UI_Forms_Form$_initKeyHandler() {
        if (this._submitOnCtrlS) {
        }
    },
    
    _shortcutCtrlSPressed: function js_com_cs_v4_UI_Forms_Form$_shortcutCtrlSPressed() {
        if (this._formFocused) {
            this.submit(true, true);
        }
    },
    
    _resetFieldsInitialEmptyTextsIfEmpty: function js_com_cs_v4_UI_Forms_Form$_resetFieldsInitialEmptyTextsIfEmpty() {
        this.toggleFieldsInitialEmptyTextsIfEmpty(true);
    },
    
    toggleFieldsInitialEmptyTextsIfEmpty: function js_com_cs_v4_UI_Forms_Form$toggleFieldsInitialEmptyTextsIfEmpty(setInitialEmptyText) {
        /// <summary>
        /// Parse all the fields and if a field is empty, either set the initial empty text or else set it to nothing ''
        /// </summary>
        /// <param name="setInitialEmptyText" type="Boolean">
        /// </param>
        for (var i = 0; i < this.get_fields().length; i++) {
            var field = this.get_fields()[i];
            if (Type.canCast(field, js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams)) {
                (field).ifEmptyToggleInitialEmptyText(setInitialEmptyText);
            }
        }
    },
    
    submit: function js_com_cs_v4_UI_Forms_Form$submit(clickDefaultButton, doNotTriggerSubmitEvent) {
        /// <param name="clickDefaultButton" type="Boolean">
        /// </param>
        /// <param name="doNotTriggerSubmitEvent" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        this.toggleFieldsInitialEmptyTextsIfEmpty(false);
        var result = false;
        if ((this.__onPreValidation == null && ((!js.com.cs.v4.UI.Forms.FormsCollection.get_instance().containsPreValidationEvent()) || (js.com.cs.v4.UI.Forms.FormsCollection.get_instance().triggerPreValidationEvent(this) != null))) || (this.__onPreValidation != null && this.__onPreValidation(this) != null)) {
            if (!this.validate().length) {
                if ((this.__onPostValidation == null && (!js.com.cs.v4.UI.Forms.FormsCollection.get_instance().containsPostValidationEvent() || js.com.cs.v4.UI.Forms.FormsCollection.get_instance().triggerPostValidationEvent(this) != null)) || (this.__onPostValidation != null && this.__onPostValidation(this) != null)) {
                    if (this.__onCustomSubmit == null || this.__onCustomSubmit(this)) {
                        if (!doNotTriggerSubmitEvent) {
                            if (this.__onSubmit != null) {
                                this.__onSubmit();
                            }
                            if (this.__onSubmitEvent != null) {
                                this.__onSubmitEvent(this, null);
                            }
                            if (js.com.cs.v4.UI.Forms.FormsCollection.get_instance().containsOnSubmit()) {
                                js.com.cs.v4.UI.Forms.FormsCollection.get_instance().triggerSubmitEvent(this);
                            }
                        }
                        js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.get_instance().start();
                        var defBtn = this.getDefaultButton();
                        if (clickDefaultButton) {
                            defBtn.myButton.performClick();
                        }
                        result = true;
                    }
                }
            }
        }
        if (this.__onCustomSubmit != null) {
            result = this.__onCustomSubmit(this);
        }
        else {
            result = true;
        }
        window.setTimeout(ss.Delegate.create(this, this._resetFieldsInitialEmptyTextsIfEmpty), 25);
        return result;
    },
    
    validate: function js_com_cs_v4_UI_Forms_Form$validate() {
        /// <returns type="Array" elementType="FormError"></returns>
        js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.get_instance().updateFormAction(this);
        var errors = new js.com.cs.v4.Classes.General.Arrays.MyArray();
        var alertMsg = '';
        var firstErrorField = null;
        var waitingForAJAXToLoad = false;
        for (var i = 0; i < this.get_fields().length; i++) {
            var f = this.get_fields()[i];
            f.set_fieldValidationStatus(new js.com.cs.v4.UI.Forms.FieldValidationResult(js.com.cs.v4.UI.Forms.VALIDATION_STATUS.success));
            var validationResult = f.validate(true, false, true);
            if (validationResult != null) {
                if (validationResult.isError() || validationResult.status === js.com.cs.v4.UI.Forms.VALIDATION_STATUS.waitingForAJAX) {
                    var e = new js.com.cs.v4.UI.Forms.FormError(f, validationResult);
                    errors.push(e);
                    if (!String.isNullOrEmpty(alertMsg)) {
                        alertMsg += '\r\n';
                    }
                    alertMsg += validationResult.message;
                    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.validationResult.message;
            }
        }
        if (!String.isNullOrEmpty(alertMsg)) {
            alert(alertMsg);
        }
        if (firstErrorField != null) {
            firstErrorField.focus();
        }
        return errors.getBaseArray();
    },
    
    getFieldById: function js_com_cs_v4_UI_Forms_Form$getFieldById(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.FieldBase"></returns>
        for (var i = 0; i < this._fields.length; i++) {
            var checkField = this._fields[i];
            if (checkField.id === id) {
                return checkField;
            }
        }
        return null;
    },
    
    fieldAlreadyExists: function js_com_cs_v4_UI_Forms_Form$fieldAlreadyExists(field) {
        /// <param name="field" type="js.com.cs.v4.UI.Forms.FieldBase">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.getFieldById(field.id) != null;
    },
    
    addField: function js_com_cs_v4_UI_Forms_Form$addField(field) {
        /// <param name="field" type="js.com.cs.v4.UI.Forms.FieldBase">
        /// </param>
        if (!this.fieldAlreadyExists(field)) {
            if (this.formElement == null) {
                this.formElement = new js.com.cs.v4.Controls.Common.MyFormElement(field.get_element().get_form());
            }
            field.form = this;
            this.get_fields()[this.get_fields().length] = field;
            field.get_element().add_onFocus(ss.Delegate.create(this, this._field_onFocus));
            field.get_element().add_onBlur(ss.Delegate.create(this, this._field_onBlur));
        }
    },
    
    _field_onBlur: function js_com_cs_v4_UI_Forms_Form$_field_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._formFocused = false;
    },
    
    _field_onFocus: function js_com_cs_v4_UI_Forms_Form$_field_onFocus(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._formFocused = true;
    },
    
    addGroup: function js_com_cs_v4_UI_Forms_Form$addGroup(group) {
        /// <param name="group" type="js.com.cs.v4.UI.Forms.FieldSubGroup">
        /// </param>
        group.form = this;
        this.groups[this.groups.length] = group;
    },
    
    getButtonById: function js_com_cs_v4_UI_Forms_Form$getButtonById(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.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_v4_UI_Forms_Form$buttonAlreadyExists(button) {
        /// <param name="button" type="js.com.cs.v4.UI.Forms.Button">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.getButtonById(button.get_id()) != null;
    },
    
    addButton: function js_com_cs_v4_UI_Forms_Form$addButton(button) {
        /// <param name="button" type="js.com.cs.v4.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.v4.Controls.Common.MyFormElement(button.myButton.get_myElement().get_form());
            }
            button.set_form(this);
            this.buttons[this.buttons.length] = button;
        }
    },
    
    getDefaultButton: function js_com_cs_v4_UI_Forms_Form$getDefaultButton() {
        /// <returns type="js.com.cs.v4.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_v4_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.v4.Util.ArrayUtil.removeItemFromArray(this.buttons, i);
                return true;
            }
        }
        return false;
    },
    
    toString: function js_com_cs_v4_UI_Forms_Form$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Form - ' + this.validationGroup + ']';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FormError

js.com.cs.v4.UI.Forms.FormError = function js_com_cs_v4_UI_Forms_FormError(field, validationResult) {
    /// <param name="field" type="js.com.cs.v4.UI.Forms.Field">
    /// </param>
    /// <param name="validationResult" type="js.com.cs.v4.UI.Forms.FieldValidationResult">
    /// </param>
    /// <field name="item" type="Object">
    /// </field>
    /// <field name="validationResult" type="js.com.cs.v4.UI.Forms.FieldValidationResult">
    /// </field>
    this.item = field;
    this.validationResult = validationResult;
}
js.com.cs.v4.UI.Forms.FormError.prototype = {
    item: null,
    validationResult: null,
    
    init: function js_com_cs_v4_UI_Forms_FormError$init() {
    },
    
    toString: function js_com_cs_v4_UI_Forms_FormError$toString() {
        /// <returns type="String"></returns>
        var errMsg = null;
        if (this.validationResult != null) {
            errMsg = this.validationResult.message;
        }
        return '[com.cs.ui.form.FieldError] - ' + errMsg;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.FormsCollection

js.com.cs.v4.UI.Forms.FormsCollection = function js_com_cs_v4_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.v4.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="SUPRESS_ASPNET_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.v4.UI.Forms.FieldBase">
    /// </field>
    /// <field name="currentForm" type="js.com.cs.v4.UI.Forms.Form">
    /// </field>
    /// <field name="__onPreValidation" type="js.com.cs.v4.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="__onPostValidation" type="js.com.cs.v4.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="__onSubmit" type="js.com.cs.v4.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="_keyBefore" type="Boolean">
    /// </field>
    this.__onPostValidation = ss.Delegate.create(this, this._DefaultValidationHandler);
    this.__onPreValidation = ss.Delegate.create(this, this._DefaultValidationHandler);
    this._forms = {};
    this._items = {};
}
js.com.cs.v4.UI.Forms.FormsCollection.get_instance = function js_com_cs_v4_UI_Forms_FormsCollection$get_instance() {
    /// <value type="js.com.cs.v4.UI.Forms.FormsCollection"></value>
    if (js.com.cs.v4.UI.Forms.FormsCollection._Instance == null) {
        js.com.cs.v4.UI.Forms.FormsCollection._Instance = new js.com.cs.v4.UI.Forms.FormsCollection();
    }
    return js.com.cs.v4.UI.Forms.FormsCollection._Instance;
}
js.com.cs.v4.UI.Forms.FormsCollection.submitCurrentForm = function js_com_cs_v4_UI_Forms_FormsCollection$submitCurrentForm() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v4.UI.Forms.FormsCollection.get_instance().currentForm.submit(false, false);
}
js.com.cs.v4.UI.Forms.FormsCollection.ASPNetWebFormOnSubmit = function js_com_cs_v4_UI_Forms_FormsCollection$ASPNetWebFormOnSubmit() {
    /// <returns type="Boolean"></returns>
    if (!js.com.cs.v4.UI.Forms.FormsCollection.SUPRESS_ASPNET_FORM_SUBMIT) {
        if (!js.com.cs.v4.UI.Forms.FormsCollection.CLICKED_BUTTON) {
            js.com.cs.v4.UI.Forms.FormsCollection.get_instance().clickCurrentFormDefaultButton();
            return false;
        }
        var btnClicked = js.com.cs.v4.UI.Forms.FormsCollection.get_instance().currentForm.currentClickedButton;
        var errs = btnClicked.get_form().validate();
        var ok = (errs == null || !errs.length);
        if (ok) {
            ok = js.com.cs.v4.UI.Forms.FormsCollection.submitCurrentForm();
        }
        return ok;
    }
    else {
        return false;
    }
}
js.com.cs.v4.UI.Forms.FormsCollection.prototype = {
    _forms: null,
    _items: null,
    _keyHandlerConnected: false,
    keyEnterEnabled: true,
    showNoDefaultButtonFoundMessage: true,
    _fieldFocus: null,
    currentForm: null,
    
    add_onPreValidation: function js_com_cs_v4_UI_Forms_FormsCollection$add_onPreValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPreValidation = ss.Delegate.combine(this.__onPreValidation, value);
    },
    remove_onPreValidation: function js_com_cs_v4_UI_Forms_FormsCollection$remove_onPreValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPreValidation = ss.Delegate.remove(this.__onPreValidation, value);
    },
    
    __onPreValidation: null,
    
    add_onPostValidation: function js_com_cs_v4_UI_Forms_FormsCollection$add_onPostValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPostValidation = ss.Delegate.combine(this.__onPostValidation, value);
    },
    remove_onPostValidation: function js_com_cs_v4_UI_Forms_FormsCollection$remove_onPostValidation(value) {
        /// <param name="value" type="Function" />
        this.__onPostValidation = ss.Delegate.remove(this.__onPostValidation, value);
    },
    
    __onPostValidation: null,
    
    add_onSubmit: function js_com_cs_v4_UI_Forms_FormsCollection$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.__onSubmit = ss.Delegate.combine(this.__onSubmit, value);
    },
    remove_onSubmit: function js_com_cs_v4_UI_Forms_FormsCollection$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.__onSubmit = ss.Delegate.remove(this.__onSubmit, value);
    },
    
    __onSubmit: null,
    
    _DefaultValidationHandler: function js_com_cs_v4_UI_Forms_FormsCollection$_DefaultValidationHandler(form) {
        /// <param name="form" type="js.com.cs.v4.UI.Forms.Form">
        /// </param>
        /// <returns type="String"></returns>
        return null;
    },
    
    containsPreValidationEvent: function js_com_cs_v4_UI_Forms_FormsCollection$containsPreValidationEvent() {
        /// <returns type="Boolean"></returns>
        return this.__onPreValidation != null;
    },
    
    triggerPreValidationEvent: function js_com_cs_v4_UI_Forms_FormsCollection$triggerPreValidationEvent(form) {
        /// <param name="form" type="js.com.cs.v4.UI.Forms.Form">
        /// </param>
        /// <returns type="String"></returns>
        if (this.__onPreValidation != null) {
            return this.__onPreValidation(form);
        }
        return null;
    },
    
    containsOnSubmit: function js_com_cs_v4_UI_Forms_FormsCollection$containsOnSubmit() {
        /// <returns type="Boolean"></returns>
        return this.__onSubmit != null;
    },
    
    containsPostValidationEvent: function js_com_cs_v4_UI_Forms_FormsCollection$containsPostValidationEvent() {
        /// <returns type="Boolean"></returns>
        return this.__onPostValidation != null;
    },
    
    triggerSubmitEvent: function js_com_cs_v4_UI_Forms_FormsCollection$triggerSubmitEvent(form) {
        /// <param name="form" type="js.com.cs.v4.UI.Forms.Form">
        /// </param>
        /// <returns type="String"></returns>
        if (this.__onSubmit != null) {
            return this.__onSubmit(form);
        }
        return null;
    },
    
    triggerPostValidationEvent: function js_com_cs_v4_UI_Forms_FormsCollection$triggerPostValidationEvent(form) {
        /// <param name="form" type="js.com.cs.v4.UI.Forms.Form">
        /// </param>
        /// <returns type="String"></returns>
        if (this.__onPostValidation != null) {
            return this.__onPostValidation(form);
        }
        return null;
    },
    
    _enterPressed: function js_com_cs_v4_UI_Forms_FormsCollection$_enterPressed() {
        if (this.keyEnterEnabled) {
            this.clickCurrentFormDefaultButton();
        }
    },
    
    _keyUp: function js_com_cs_v4_UI_Forms_FormsCollection$_keyUp(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (e.which === js.com.cs.v4.Enums.KEY.ENTER) {
            if (this.get_fieldWithFocus() != null && this.get_fieldWithFocus().get_element().get_element().tagName.toLowerCase() !== 'textarea') {
                this._enterPressed();
            }
        }
    },
    
    _initKeyHandler: function js_com_cs_v4_UI_Forms_FormsCollection$_initKeyHandler(init) {
        /// <param name="init" type="Boolean">
        /// </param>
        if (init) {
            if (!this._keyHandlerConnected) {
                new js.com.cs.v4.Controls.Common.MyElement(window.document.body).add_onKeyUp(ss.Delegate.create(this, this._keyUp));
                this._keyHandlerConnected = true;
            }
        }
        else {
            if (this._keyHandlerConnected) {
                new js.com.cs.v4.Controls.Common.MyElement(window.document.body).remove_onKeyUp(ss.Delegate.create(this, this._keyUp));
                this._keyHandlerConnected = false;
            }
        }
    },
    
    _getForm: function js_com_cs_v4_UI_Forms_FormsCollection$_getForm(groupID) {
        /// <param name="groupID" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.Form"></returns>
        if (ss.isNullOrUndefined(groupID)) {
            groupID = '__MAIN';
        }
        var f = this._forms[groupID];
        if (ss.isNullOrUndefined(f)) {
            f = new js.com.cs.v4.UI.Forms.Form(groupID);
            this._forms[groupID] = f;
        }
        return f;
    },
    
    removeField: function js_com_cs_v4_UI_Forms_FormsCollection$removeField(field) {
        /// <param name="field" type="js.com.cs.v4.UI.Forms.FieldBase">
        /// </param>
        if (field != null) {
            delete this._items[field.id];
            field.destroy();
        }
    },
    
    addField: function js_com_cs_v4_UI_Forms_FormsCollection$addField(field) {
        /// <param name="field" type="js.com.cs.v4.UI.Forms.FieldBase">
        /// </param>
        var validationGroup = field.get_validationParams().validationGroup;
        var form = this._getForm(validationGroup);
        var fieldID = field.id;
        this._items[fieldID] = field;
        form.addField(field);
    },
    
    addGroup: function js_com_cs_v4_UI_Forms_FormsCollection$addGroup(group) {
        /// <param name="group" type="js.com.cs.v4.UI.Forms.FieldSubGroup">
        /// </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_v4_UI_Forms_FormsCollection$buttonAlreadyExists(button) {
        /// <param name="button" type="js.com.cs.v4.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_v4_UI_Forms_FormsCollection$removeButton(button) {
        /// <param name="button" type="js.com.cs.v4.UI.Forms.Button">
        /// </param>
        var form = this._getForm(button.validationGroup);
        if (form != null) {
            form.removeButtonById(button.get_id());
        }
    },
    
    addButton: function js_com_cs_v4_UI_Forms_FormsCollection$addButton(button) {
        /// <param name="button" type="js.com.cs.v4.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_v4_UI_Forms_FormsCollection$get_fieldWithFocus() {
        /// <value type="js.com.cs.v4.UI.Forms.FieldBase"></value>
        return this._fieldFocus;
    },
    set_fieldWithFocus: function js_com_cs_v4_UI_Forms_FormsCollection$set_fieldWithFocus(value) {
        /// <value type="js.com.cs.v4.UI.Forms.FieldBase"></value>
        this._fieldFocus = value;
        this._initKeyHandler(!ss.isNullOrUndefined(this._fieldFocus));
        if (this._fieldFocus == null) {
        }
        else {
            this.currentForm = this._fieldFocus.form;
        }
        return value;
    },
    
    _keyBefore: false,
    
    _clickCurrentFormDefaultButton_Callback: function js_com_cs_v4_UI_Forms_FormsCollection$_clickCurrentFormDefaultButton_Callback() {
        this.keyEnterEnabled = this._keyBefore;
        js.com.cs.v4.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    clickCurrentFormDefaultButton: function js_com_cs_v4_UI_Forms_FormsCollection$clickCurrentFormDefaultButton() {
        js.com.cs.v4.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.v4.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    validateCurrentForm: function js_com_cs_v4_UI_Forms_FormsCollection$validateCurrentForm() {
        /// <returns type="Array" elementType="FormError"></returns>
        var form = this.currentForm;
        js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.get_instance().updateFormAction(form);
        if (form != null) {
            var errors = form.validate();
            if (errors == null || !errors.length) {
                if (js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.get_instance() != null) {
                    if (js.com.cs.v4.UI.Forms.FormsCollection.HasFileUpload) {
                        js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.get_instance().start();
                    }
                }
            }
            return errors;
        }
        else {
            return [];
        }
    },
    
    _init: function js_com_cs_v4_UI_Forms_FormsCollection$_init() {
    },
    
    getGroupByID: function js_com_cs_v4_UI_Forms_FormsCollection$getGroupByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.FieldSubGroup"></returns>
        return this._items[id];
    },
    
    getFieldByElement: function js_com_cs_v4_UI_Forms_FormsCollection$getFieldByElement(field) {
        /// <param name="field" type="Object" domElement="true">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.Field"></returns>
        var $dict1 = this._items;
        for (var $key2 in $dict1) {
            var x = { key: $key2, value: $dict1[$key2] };
            if (Type.canCast(x.value, js.com.cs.v4.UI.Forms.Field)) {
                var f = x.value;
                if (f.get_element().get_element() === field) {
                    return f;
                }
            }
        }
        return null;
    },
    
    getFieldByID: function js_com_cs_v4_UI_Forms_FormsCollection$getFieldByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.Field"></returns>
        return this._items[id];
    },
    
    getButtonByID: function js_com_cs_v4_UI_Forms_FormsCollection$getButtonByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.Button"></returns>
        return this._items[id];
    },
    
    getFormByID: function js_com_cs_v4_UI_Forms_FormsCollection$getFormByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Forms.Form"></returns>
        return this._forms[id];
    },
    
    clearForm: function js_com_cs_v4_UI_Forms_FormsCollection$clearForm(formValidationGroupID) {
        /// <param name="formValidationGroupID" type="String">
        /// </param>
        this._forms[formValidationGroupID] = null;
    },
    
    toString: function js_com_cs_v4_UI_Forms_FormsCollection$toString() {
        /// <returns type="String"></returns>
        return 'FormsCollection';
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Forms.LinkedMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuClass

js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuClass = function js_com_cs_v4_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.v4.UI.Forms.LinkedMenu.LinkedMenuClass.prototype = {
    _cmbs: null,
    _root: null,
    cssDisabled: null,
    
    _parseCmbs: function js_com_cs_v4_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.v4.Controls.Form.MyDropDownList(cmb);
                this._cmbs[this._cmbs.length] = new js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuComboBox(cmb, i, this, null);
            }
        }
    },
    
    _enableAllLevels: function js_com_cs_v4_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_v4_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_v4_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_v4_UI_Forms_LinkedMenu_LinkedMenuClass$init(rootLevel) {
        /// <param name="rootLevel" type="js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuLevel">
        /// </param>
        this._root = rootLevel;
        this.populateLevel(0, rootLevel.children);
    },
    
    addComboBox: function js_com_cs_v4_UI_Forms_LinkedMenu_LinkedMenuClass$addComboBox(cmb, disabledText) {
        /// <param name="cmb" type="js.com.cs.v4.Controls.Form.MyDropDownList">
        /// </param>
        /// <param name="disabledText" type="String">
        /// </param>
        if (Type.canCast(cmb, String)) {
            cmb = new js.com.cs.v4.Controls.Form.MyDropDownList(cmb);
        }
        var cmbBox = new js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuComboBox(cmb, this._cmbs.length, this, disabledText);
        this._cmbs[this._cmbs.length] = cmbBox;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuComboBox

js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuComboBox = function js_com_cs_v4_UI_Forms_LinkedMenu_LinkedMenuComboBox(cmb, levelIndex, linkedMenu, disabledText) {
    /// <param name="cmb" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </param>
    /// <param name="levelIndex" type="Number" integer="true">
    /// </param>
    /// <param name="linkedMenu" type="js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuClass">
    /// </param>
    /// <param name="disabledText" type="String">
    /// </param>
    /// <field name="cmb" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="linkedMenu" type="js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuClass">
    /// </field>
    /// <field name="disabledText" type="String">
    /// </field>
    /// <field name="_currentOnChangeHandler" type="Action">
    /// </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.v4.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.v4.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_v4_UI_Forms_LinkedMenu_LinkedMenuComboBox$_getLinkedMenuLevel(value) {
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.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_v4_UI_Forms_LinkedMenu_LinkedMenuComboBox$_onChange(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var value = this.cmb.get_value();
        if (value === this._currentValue) {
            return;
        }
        this._currentValue = value;
        if (this._currentOnChangeHandler != null) {
            this._currentOnChangeHandler();
        }
        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_v4_UI_Forms_LinkedMenu_LinkedMenuComboBox$_initHandlers() {
        this.cmb.add_onChange(ss.Delegate.create(this, this._onChange));
        this.cmb.add_onKeyDown(ss.Delegate.create(this, this._onChange));
    },
    
    _clearItems: function js_com_cs_v4_UI_Forms_LinkedMenu_LinkedMenuComboBox$_clearItems() {
        while (this.cmb.get_options().length > 0) {
            this.cmb.removeItem(0);
        }
    },
    
    _init: function js_com_cs_v4_UI_Forms_LinkedMenu_LinkedMenuComboBox$_init() {
        this._clearItems();
        this._initHandlers();
    },
    
    enable: function js_com_cs_v4_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_v4_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_v4_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.v4.UI.Forms.LinkedMenu.LinkedMenuLevel

js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuLevel = function js_com_cs_v4_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 (ss.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.v4.UI.Forms.LinkedMenu.LinkedMenuLevel.prototype = {
    option: null,
    selected: false,
    children: null,
    title: null,
    value: null,
    
    addSubLevel: function js_com_cs_v4_UI_Forms_LinkedMenu_LinkedMenuLevel$addSubLevel(linkedMenuLevel) {
        /// <param name="linkedMenuLevel" type="js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuLevel">
        /// </param>
        this.children[this.children.length] = linkedMenuLevel;
    },
    
    addSubLevels: function js_com_cs_v4_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]);
        }
    }
}


Type.registerNamespace('js.com.cs.v4.UI.HelpMessageIcon');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon

js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon = function js_com_cs_v4_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.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_divMessage" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_customCSS" type="String">
    /// </field>
    /// <field name="_aHelpIcon" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_ctrlPositioner" type="js.com.cs.v4.UI.CtrlPositionerOld">
    /// </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.v4.Controls.Common.MyElement(itemID);
    this._customCSS = customCSS;
    this._initMessage(helpMessage);
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon.prototype = {
    _elem: null,
    _divMessage: null,
    _customCSS: null,
    _aHelpIcon: null,
    _ctrlPositioner: null,
    
    _updateContainer: function js_com_cs_v4_UI_HelpMessageIcon_HelpMessageIcon$_updateContainer() {
    },
    
    _initMessage: function js_com_cs_v4_UI_HelpMessageIcon_HelpMessageIcon$_initMessage(msg) {
        /// <param name="msg" type="String">
        /// </param>
        this._divMessage = new js.com.cs.v4.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_v4_UI_HelpMessageIcon_HelpMessageIcon$_initHelpIcon() {
        this._aHelpIcon = new js.com.cs.v4.Controls.Common.MyAnchorElement();
        this._aHelpIcon.addClass('help-icon');
        this._aHelpIcon.get_jQueryElement().attr('disabled', 'disabled');
        this._aHelpIcon.set_href('javascript:');
        this._aHelpIcon.add_onMouseEnter(ss.Delegate.create(this, this._aHelpIcon_onMouseEnter));
        this._aHelpIcon.add_onMouseLeave(ss.Delegate.create(this, this._aHelpIcon_onMouseLeave));
        if (!String.isNullOrEmpty(this._customCSS)) {
            this._aHelpIcon.addClass(this._customCSS);
        }
    },
    
    _aHelpIcon_onMouseLeave: function js_com_cs_v4_UI_HelpMessageIcon_HelpMessageIcon$_aHelpIcon_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._divMessage.get_jQueryElement().stop(true);
        this._divMessage.get_jQueryElement().fadeOut(js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon._fadE_DURATION_MS);
    },
    
    _aHelpIcon_onMouseEnter: function js_com_cs_v4_UI_HelpMessageIcon_HelpMessageIcon$_aHelpIcon_onMouseEnter(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._divMessage.get_jQueryElement().stop(true);
        this._divMessage.set_opacity(js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon._fadE_ALPHA);
        this._divMessage.get_jQueryElement().fadeOut(0);
        this._divMessage.get_jQueryElement().fadeIn(js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon._fadE_DURATION_MS);
    },
    
    _initPosition: function js_com_cs_v4_UI_HelpMessageIcon_HelpMessageIcon$_initPosition() {
        this._ctrlPositioner = new js.com.cs.v4.UI.CtrlPositionerOld();
        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_v4_UI_HelpMessageIcon_HelpMessageIcon$_init() {
        this._initHelpIcon();
        this._initPosition();
    }
}


Type.registerNamespace('js.com.cs.v4.UI.IBar');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.IBar.BarType

js.com.cs.v4.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.v4.UI.IBar.BarType.prototype = {
    successBar: 0, 
    errorBar: 1, 
    informationBar: 2
}
js.com.cs.v4.UI.IBar.BarType.registerEnum('js.com.cs.v4.UI.IBar.BarType', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.IBar.InformationBar

js.com.cs.v4.UI.IBar.InformationBar = function js_com_cs_v4_UI_IBar_InformationBar(typeOfJqueryBar, BarText, barProperties) {
    /// <param name="typeOfJqueryBar" type="js.com.cs.v4.UI.IBar.BarType">
    /// </param>
    /// <param name="BarText" type="String">
    /// </param>
    /// <param name="barProperties" type="js.com.cs.v4.UI.IBar.InformationBarProperties">
    /// </param>
    /// <field name="__onClosed$2" type="js.com.cs.v4.UI.IBar.BarEventHandler">
    /// </field>
    /// <field name="__onBeginClosing$2" type="js.com.cs.v4.UI.IBar.BarEventHandler">
    /// </field>
    /// <field name="_typeOfJqueryBar$2" type="js.com.cs.v4.UI.IBar.BarType">
    /// </field>
    /// <field name="_barText$2" type="String">
    /// </field>
    /// <field name="_barProperties$2" type="js.com.cs.v4.UI.IBar.InformationBarProperties">
    /// </field>
    js.com.cs.v4.UI.IBar.InformationBar.initializeBase(this);
    this._typeOfJqueryBar$2 = typeOfJqueryBar;
    this._barText$2 = BarText;
    this._checkInformationBarProperties$2(barProperties);
    this._init$2();
    this._animateBar$2();
}
js.com.cs.v4.UI.IBar.InformationBar.prototype = {
    
    add_onClosed: function js_com_cs_v4_UI_IBar_InformationBar$add_onClosed(value) {
        /// <summary>
        /// Events for closing the Information bar
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onClosed$2 = ss.Delegate.combine(this.__onClosed$2, value);
    },
    remove_onClosed: function js_com_cs_v4_UI_IBar_InformationBar$remove_onClosed(value) {
        /// <summary>
        /// Events for closing the Information bar
        /// </summary>
        /// <param name="value" type="Function" />
        this.__onClosed$2 = ss.Delegate.remove(this.__onClosed$2, value);
    },
    
    __onClosed$2: null,
    
    add_onBeginClosing: function js_com_cs_v4_UI_IBar_InformationBar$add_onBeginClosing(value) {
        /// <param name="value" type="Function" />
        this.__onBeginClosing$2 = ss.Delegate.combine(this.__onBeginClosing$2, value);
    },
    remove_onBeginClosing: function js_com_cs_v4_UI_IBar_InformationBar$remove_onBeginClosing(value) {
        /// <param name="value" type="Function" />
        this.__onBeginClosing$2 = ss.Delegate.remove(this.__onBeginClosing$2, value);
    },
    
    __onBeginClosing$2: null,
    _typeOfJqueryBar$2: 0,
    _barText$2: null,
    _barProperties$2: null,
    
    _animateBar$2: function js_com_cs_v4_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_v4_UI_IBar_InformationBar$_checkInformationBarProperties$2(barProperties) {
        /// <param name="barProperties" type="js.com.cs.v4.UI.IBar.InformationBarProperties">
        /// </param>
        if (barProperties == null) {
            barProperties = new js.com.cs.v4.UI.IBar.InformationBarProperties();
        }
        this._barProperties$2 = barProperties;
    },
    
    _generateBar$2: function js_com_cs_v4_UI_IBar_InformationBar$_generateBar$2(typeOfBar, BarText) {
        /// <param name="typeOfBar" type="js.com.cs.v4.UI.IBar.BarType">
        /// </param>
        /// <param name="BarText" type="String">
        /// </param>
        switch (this._typeOfJqueryBar$2) {
            case js.com.cs.v4.UI.IBar.BarType.successBar:
                this._generateSuccessBar$2(BarText);
                break;
            case js.com.cs.v4.UI.IBar.BarType.errorBar:
                this._generateErrorBar$2(BarText);
                break;
            case js.com.cs.v4.UI.IBar.BarType.informationBar:
                this._generateInformationBar$2(BarText);
                break;
        }
    },
    
    _init$2: function js_com_cs_v4_UI_IBar_InformationBar$_init$2() {
        this._generateBar$2(this._typeOfJqueryBar$2, this._barText$2);
    },
    
    _barGenerator$2: function js_com_cs_v4_UI_IBar_InformationBar$_barGenerator$2(BarText) {
        /// <param name="BarText" type="String">
        /// </param>
        var backgroundElement = new js.com.cs.v4.Controls.Common.MyDivElement();
        backgroundElement.set_cssClass('bar-background');
        var mainWrapperElement = new js.com.cs.v4.Controls.Common.MyDivElement();
        mainWrapperElement.set_cssClass('bar-main-content');
        var mainWrapperElementWrapper = new js.com.cs.v4.Controls.Common.MyDivElement();
        mainWrapperElementWrapper.appendChild(mainWrapperElement);
        mainWrapperElementWrapper.set_cssClass('bar-main-content-wrapper');
        var mainImageElement = new js.com.cs.v4.Controls.Common.MyDivElement();
        var mainSpanElement = new js.com.cs.v4.Controls.Common.MySpanElement();
        var mainCloseButtonElement = new js.com.cs.v4.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(ss.Delegate.create(this, this._mainCloseButtonElement_onClick$2));
        var mainContainer = new js.com.cs.v4.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_v4_UI_IBar_InformationBar$_mainCloseButtonElement_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onBeginClosing$2 != null) {
            this.__onBeginClosing$2();
        }
        if (this._barProperties$2.slideUp) {
            this.get_jQueryElement().slideUp(this._barProperties$2.slideDuration, ss.Delegate.create(this, this._informationBarClosed$2));
        }
    },
    
    _informationBarClosed$2: function js_com_cs_v4_UI_IBar_InformationBar$_informationBarClosed$2() {
        if (this.__onClosed$2 != null) {
            this.__onClosed$2();
        }
        document.body.removeChild(this.get_element());
    },
    
    _setElementOpacity$2: function js_com_cs_v4_UI_IBar_InformationBar$_setElementOpacity$2(element) {
        /// <param name="element" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        element.set_opacity(this._barProperties$2.opacity);
    },
    
    _attachBarToBody$2: function js_com_cs_v4_UI_IBar_InformationBar$_attachBarToBody$2() {
        if (this._barProperties$2.attachToBody) {
            js.com.JQueryScriptSharpV2.jQueryUtil.select('body').prepend(this.get_element());
        }
    },
    
    _generateErrorBar$2: function js_com_cs_v4_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_v4_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_v4_UI_IBar_InformationBar$_generateSuccessBar$2(BarText) {
        /// <param name="BarText" type="String">
        /// </param>
        this.set_cssClass('success-bar');
        this._barGenerator$2(BarText);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.IBar.InformationBarProperties

js.com.cs.v4.UI.IBar.InformationBarProperties = function js_com_cs_v4_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.v4.UI.IBar.InformationBarProperties.prototype = {
    attachToBody: false,
    slideUp: false,
    slideDown: false,
    slideDuration: 0,
    opacity: 0
}


Type.registerNamespace('js.com.cs.v4.UI.InfiniteScroller');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION

js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION = function() { 
    /// <field name="up" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="down" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.prototype = {
    up: 0, 
    down: 1, 
    left: 2, 
    right: 3
}
js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.registerEnum('js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.InfiniteScroller.InfiniteScroller

js.com.cs.v4.UI.InfiniteScroller.InfiniteScroller = function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters">
    /// </param>
    /// <field name="_parameters" type="js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters">
    /// </field>
    /// <field name="_visibleWidth" type="Number" integer="true">
    /// </field>
    /// <field name="_fullUlWidths" type="Number" integer="true">
    /// </field>
    /// <field name="_halfFullUlWidths" type="Number" integer="true">
    /// </field>
    /// <field name="_containerDiv" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_elementsOk" type="Boolean">
    /// </field>
    /// <field name="_slidingDiv" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_slideId" type="Number" integer="true">
    /// </field>
    /// <field name="_initialPosition" type="Number" integer="true">
    /// </field>
    /// <field name="_containerDivHeight" type="Number" integer="true">
    /// </field>
    /// <field name="_currentPosition" type="Number" integer="true">
    /// </field>
    /// <field name="_parameterInCss" type="String">
    /// </field>
    /// <field name="_clonedUlElements" type="jQuery">
    /// </field>
    /// <field name="_imagesLoaded" type="Number" integer="true">
    /// </field>
    /// <field name="_jImages" type="jQuery">
    /// </field>
    this._parameters = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.InfiniteScroller.InfiniteScroller.prototype = {
    _parameters: null,
    _visibleWidth: 0,
    _fullUlWidths: 0,
    _halfFullUlWidths: 0,
    _containerDiv: null,
    _elementsOk: false,
    _slidingDiv: null,
    _slideId: 0,
    _initialPosition: 0,
    _containerDivHeight: 0,
    _currentPosition: 0,
    _parameterInCss: null,
    _clonedUlElements: null,
    _imagesLoaded: 0,
    _jImages: null,
    
    _init: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_init() {
        this._initPrerequisites();
        if (this._elementsOk) {
            var containsImages = this._checkImagesInContent();
            if (containsImages) {
                this._waitUntilImagesLoaded();
            }
            else {
                this._initScroller();
            }
        }
    },
    
    _checkAllImagesLoaded: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_checkAllImagesLoaded() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this._jImages.length; i++) {
            if (!this._jImages.eq(i).width() || !this._jImages.eq(i).height()) {
                return false;
            }
        }
        return true;
    },
    
    _waitUntilImagesLoaded: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_waitUntilImagesLoaded() {
        if (this._checkAllImagesLoaded()) {
            this._initScroller();
        }
        else {
            window.setTimeout(ss.Delegate.create(this, this._waitUntilImagesLoaded), 250);
        }
    },
    
    _onImageLoaded: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_onImageLoaded(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._imagesLoaded++;
    },
    
    _initScroller: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_initScroller() {
        if (this._checkWhetherScrollShouldBeActivated()) {
            this._slidingDiv.appendChild(this._clonedUlElements);
            this._activateScroller();
            this._containerDiv.add_onMouseOver(ss.Delegate.create(this, this._containerDiv_onMouseOver));
            this._containerDiv.add_onMouseOut(ss.Delegate.create(this, this._containerDiv_onMouseOut));
        }
    },
    
    _containerDiv_onMouseOut: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_containerDiv_onMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._initSlide();
    },
    
    _containerDiv_onMouseOver: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_containerDiv_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._slideId != null) {
            window.clearInterval(this._slideId);
        }
    },
    
    _activateScroller: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_activateScroller() {
        switch (this._parameters.direction) {
            case js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.right:
                this._initialPosition = (-1 * (this._fullUlWidths - this._visibleWidth));
                this._parameterInCss = 'left';
                this._slidingDiv.get_jQueryElement().css(this._parameterInCss, this._initialPosition + 'px');
                break;
            case js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.up:
                this._initialPosition = 0;
                this._parameterInCss = 'top';
                this._slidingDiv.get_jQueryElement().css(this._parameterInCss, this._initialPosition + 'px');
                this._centerUlInDiv();
                break;
            case js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.down:
                this._initialPosition = this._containerDivHeight;
                this._parameterInCss = 'top';
                this._slidingDiv.get_jQueryElement().css(this._parameterInCss, this._initialPosition + 'px');
                this._centerUlInDiv();
                break;
            case js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.left:
            default:
                this._initialPosition = 0;
                this._parameterInCss = 'left';
                this._slidingDiv.get_jQueryElement().css(this._parameterInCss, this._initialPosition + 'px');
                break;
        }
        this._fullUlWidths = this._slidingDiv.getWidth();
        this._halfFullUlWidths = this._fullUlWidths / 2;
        this._initSlide();
    },
    
    _initSlide: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_initSlide() {
        this._slideId = window.setInterval(ss.Delegate.create(this, this._slide), this._parameters.delayBetweenMovementInMS);
    },
    
    _slide: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_slide() {
        if (this._parameters.direction === js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.left || this._parameters.direction === js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.up) {
            if (this._currentPosition < (-1 * this._halfFullUlWidths)) {
                this._currentPosition = 0;
            }
            this._currentPosition = this._currentPosition - this._parameters.pixelsToMove;
            this._slidingDiv.get_jQueryElement().css(this._parameterInCss, this._currentPosition + 'px');
        }
        if (this._parameters.direction === js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.right || this._parameters.direction === js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.down) {
            if (this._currentPosition >= 0) {
                this._currentPosition = (-1 * this._halfFullUlWidths) + this._currentPosition;
            }
            this._currentPosition = this._currentPosition + this._parameters.pixelsToMove;
            this._slidingDiv.get_jQueryElement().css(this._parameterInCss, this._currentPosition + 'px');
        }
    },
    
    _checkWhetherScrollShouldBeActivated: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_checkWhetherScrollShouldBeActivated() {
        /// <returns type="Boolean"></returns>
        this._fullUlWidths = this._slidingDiv.getWidth();
        if (this._fullUlWidths > this._visibleWidth) {
            return true;
        }
        else if (this._parameters.centerImagesIfSmallerThanContainer) {
            this._centerUlInDiv();
        }
        return false;
    },
    
    _centerUlInDiv: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_centerUlInDiv() {
        var sizeDifferenceBetweenUlAndParent = this._visibleWidth - this._fullUlWidths;
        this._slidingDiv.get_jQueryElement().css('left', (sizeDifferenceBetweenUlAndParent / 2));
    },
    
    _test: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_test() {
        js.com.cs.v4.Util.Console.log(this._slidingDiv.get_jQueryElement().width());
        js.com.cs.v4.Util.Console.log(this._slidingDiv.get_jQueryElement().outerWidth());
    },
    
    _getImages: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_getImages() {
        /// <returns type="jQuery"></returns>
        if (this._jImages == null) {
            this._jImages = this._slidingDiv.get_jQueryElement().find('img');
        }
        return this._jImages;
    },
    
    _checkImagesInContent: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_checkImagesInContent() {
        /// <returns type="Boolean"></returns>
        return this._getImages().length > 0;
    },
    
    _initPrerequisites: function js_com_cs_v4_UI_InfiniteScroller_InfiniteScroller$_initPrerequisites() {
        var jQueryContainerDiv = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(this._parameters.divContainerID);
        if (jQueryContainerDiv != null) {
            this._containerDiv = new js.com.cs.v4.Controls.Common.MyDivElement(jQueryContainerDiv);
            if (this._containerDiv != null) {
                this._containerDiv.get_jQueryElement().css('position', 'relative');
                this._visibleWidth = this._containerDiv.getWidth();
                this._containerDivHeight = this._containerDiv.getHeight();
                var ulElements = this._containerDiv.get_jQueryElement().children('ul');
                if (ulElements != null) {
                    this._slidingDiv = new js.com.cs.v4.Controls.Common.MyDivElement();
                    this._clonedUlElements = ulElements.clone();
                    this._slidingDiv.appendChild(ulElements);
                    this._containerDiv.get_jQueryElement().empty();
                    this._containerDiv.appendChild(this._slidingDiv);
                    this._elementsOk = true;
                }
            }
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters

js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters = function js_com_cs_v4_UI_InfiniteScroller_InfiniteScrollerParameters() {
    /// <field name="divContainerID" type="String">
    /// </field>
    /// <field name="delayBetweenMovementInMS" type="Number" integer="true">
    /// </field>
    /// <field name="pixelsToMove" type="Number" integer="true">
    /// </field>
    /// <field name="centerImagesIfSmallerThanContainer" type="Boolean">
    /// </field>
    /// <field name="direction" type="js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION">
    /// </field>
    this.direction = js.com.cs.v4.UI.InfiniteScroller.INFINITE_SCROLLER_DIRECTION.left;
}
js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters.prototype = {
    divContainerID: null,
    delayBetweenMovementInMS: 80,
    pixelsToMove: 3,
    centerImagesIfSmallerThanContainer: true
}


Type.registerNamespace('js.com.cs.v4.UI.JQuery.FullCalendar');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendar

js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendar = function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendar(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters">
    /// </param>
    /// <field name="__onViewDisplayChanged" type="js.com.JQueryScriptSharpV2.ViewDisplayCallback">
    /// </field>
    /// <field name="_parameters" type="js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters">
    /// </field>
    this._parameters = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendar.prototype = {
    
    add_onViewDisplayChanged: function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendar$add_onViewDisplayChanged(value) {
        /// <param name="value" type="Function" />
        this.__onViewDisplayChanged = ss.Delegate.combine(this.__onViewDisplayChanged, value);
    },
    remove_onViewDisplayChanged: function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendar$remove_onViewDisplayChanged(value) {
        /// <param name="value" type="Function" />
        this.__onViewDisplayChanged = ss.Delegate.remove(this.__onViewDisplayChanged, value);
    },
    
    __onViewDisplayChanged: null,
    _parameters: null,
    
    _initControl: function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendar$_initControl() {
        this._parameters.options.viewDisplay = ss.Delegate.create(this, this._onChangeView);
        js.com.JQueryScriptSharpV2.jQueryUtil.selectById(this._parameters.divCalendarID).fullCalendar(this._parameters.options);
    },
    
    _onChangeView: function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendar$_onChangeView(name, title, start, end, visStart, visEnd) {
        /// <param name="name" type="String">
        /// </param>
        /// <param name="title" type="String">
        /// </param>
        /// <param name="start" type="Date">
        /// </param>
        /// <param name="end" type="Date">
        /// </param>
        /// <param name="visStart" type="Date">
        /// </param>
        /// <param name="visEnd" type="Date">
        /// </param>
        if (this._parameters.onChangeViewRefreshCufon) {
            Cufon.refresh();
        }
    },
    
    _init: function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendar$_init() {
        this._initControl();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters

js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters = function js_com_cs_v4_UI_JQuery_FullCalendar_FullCalendarParameters() {
    /// <field name="divCalendarID" type="String">
    /// </field>
    /// <field name="onChangeViewRefreshCufon" type="Boolean">
    /// </field>
    /// <field name="options" type="js.com.JQueryScriptSharpV2._jQueryFullCalendarOptions">
    /// </field>
}
js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters.prototype = {
    divCalendarID: null,
    onChangeViewRefreshCufon: false,
    options: null
}


Type.registerNamespace('js.com.cs.v4.UI.JQuery');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.JQueryDialog

js.com.cs.v4.UI.JQuery.JQueryDialog = function js_com_cs_v4_UI_JQuery_JQueryDialog(elem, openImmediately, opts) {
    /// <param name="elem" type="jQuery">
    /// </param>
    /// <param name="openImmediately" type="Boolean">
    /// </param>
    /// <param name="opts" type="js.com.JQueryScriptSharpV2._DialogOptions">
    /// </param>
    /// <field name="_elem$1" type="jQuery">
    /// </field>
    /// <field name="_closeable$1" type="Boolean">
    /// </field>
    /// <field name="_destroyOnClose$1" type="Boolean">
    /// </field>
    /// <field name="__onBeforeClose$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onOpen$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onFocus$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onDragStart$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onDrag$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onDragStop$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onResizeStart$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onResize$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onResizeStop$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="__onClose$1" type="js.com.cs.v4.UI.JQuery.JQueryDialogEvent">
    /// </field>
    /// <field name="_showTitleBar$1" type="Boolean">
    /// </field>
    /// <field name="_dialogBoxElement$1" type="jQuery">
    /// </field>
    js.com.cs.v4.UI.JQuery.JQueryDialog.initializeBase(this);
    if (ss.isNullOrUndefined(opts)) {
        opts = {};
    }
    this._elem$1 = elem;
    opts.minHeight = opts.minWidth = 0;
    opts.beforeclose = ss.Delegate.create(this, this._beforeClose$1);
    opts.open = ss.Delegate.create(this, this._open$1);
    opts.focus = ss.Delegate.create(this, this._focus$1);
    opts.dragStart = ss.Delegate.create(this, this._dragStart$1);
    opts.drag = ss.Delegate.create(this, this._drag$1);
    opts.dragStop = ss.Delegate.create(this, this._dragStop$1);
    opts.resizeStart = ss.Delegate.create(this, this._resizeStart$1);
    opts.resize = ss.Delegate.create(this, this._resize$1);
    opts.resizeStop = ss.Delegate.create(this, this._resizeStop$1);
    opts.close = ss.Delegate.create(this, this._close$1);
    opts.bgiframe = true;
    opts.autoOpen = openImmediately;
    this._elem$1.dialog(opts);
    this.set_showEffect(this.set_hideEffect(js.com.JQueryScriptSharpV2.JQUERY_UI_EFFECT.fade));
    this.add_onClose(ss.Delegate.create(this, this._jQueryDialog_OnClose$1));
}
js.com.cs.v4.UI.JQuery.JQueryDialog.prototype = {
    _elem$1: null,
    _closeable$1: true,
    _destroyOnClose$1: true,
    
    get_destroyOnClose: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_destroyOnClose() {
        /// <value type="Boolean"></value>
        return this._destroyOnClose$1;
    },
    set_destroyOnClose: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_destroyOnClose(value) {
        /// <value type="Boolean"></value>
        this._destroyOnClose$1 = value;
        return value;
    },
    
    add_onBeforeClose: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onBeforeClose(value) {
        /// <param name="value" type="Function" />
        this.__onBeforeClose$1 = ss.Delegate.combine(this.__onBeforeClose$1, value);
    },
    remove_onBeforeClose: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onBeforeClose(value) {
        /// <param name="value" type="Function" />
        this.__onBeforeClose$1 = ss.Delegate.remove(this.__onBeforeClose$1, value);
    },
    
    __onBeforeClose$1: null,
    
    add_onOpen: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onOpen(value) {
        /// <param name="value" type="Function" />
        this.__onOpen$1 = ss.Delegate.combine(this.__onOpen$1, value);
    },
    remove_onOpen: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onOpen(value) {
        /// <param name="value" type="Function" />
        this.__onOpen$1 = ss.Delegate.remove(this.__onOpen$1, value);
    },
    
    __onOpen$1: null,
    
    add_onFocus: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onFocus(value) {
        /// <param name="value" type="Function" />
        this.__onFocus$1 = ss.Delegate.combine(this.__onFocus$1, value);
    },
    remove_onFocus: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onFocus(value) {
        /// <param name="value" type="Function" />
        this.__onFocus$1 = ss.Delegate.remove(this.__onFocus$1, value);
    },
    
    __onFocus$1: null,
    
    add_onDragStart: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onDragStart(value) {
        /// <param name="value" type="Function" />
        this.__onDragStart$1 = ss.Delegate.combine(this.__onDragStart$1, value);
    },
    remove_onDragStart: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onDragStart(value) {
        /// <param name="value" type="Function" />
        this.__onDragStart$1 = ss.Delegate.remove(this.__onDragStart$1, value);
    },
    
    __onDragStart$1: null,
    
    add_onDrag: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onDrag(value) {
        /// <param name="value" type="Function" />
        this.__onDrag$1 = ss.Delegate.combine(this.__onDrag$1, value);
    },
    remove_onDrag: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onDrag(value) {
        /// <param name="value" type="Function" />
        this.__onDrag$1 = ss.Delegate.remove(this.__onDrag$1, value);
    },
    
    __onDrag$1: null,
    
    add_onDragStop: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onDragStop(value) {
        /// <param name="value" type="Function" />
        this.__onDragStop$1 = ss.Delegate.combine(this.__onDragStop$1, value);
    },
    remove_onDragStop: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onDragStop(value) {
        /// <param name="value" type="Function" />
        this.__onDragStop$1 = ss.Delegate.remove(this.__onDragStop$1, value);
    },
    
    __onDragStop$1: null,
    
    add_onResizeStart: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onResizeStart(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStart$1 = ss.Delegate.combine(this.__onResizeStart$1, value);
    },
    remove_onResizeStart: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onResizeStart(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStart$1 = ss.Delegate.remove(this.__onResizeStart$1, value);
    },
    
    __onResizeStart$1: null,
    
    add_onResize: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onResize(value) {
        /// <param name="value" type="Function" />
        this.__onResize$1 = ss.Delegate.combine(this.__onResize$1, value);
    },
    remove_onResize: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onResize(value) {
        /// <param name="value" type="Function" />
        this.__onResize$1 = ss.Delegate.remove(this.__onResize$1, value);
    },
    
    __onResize$1: null,
    
    add_onResizeStop: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onResizeStop(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStop$1 = ss.Delegate.combine(this.__onResizeStop$1, value);
    },
    remove_onResizeStop: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onResizeStop(value) {
        /// <param name="value" type="Function" />
        this.__onResizeStop$1 = ss.Delegate.remove(this.__onResizeStop$1, value);
    },
    
    __onResizeStop$1: null,
    
    add_onClose: function js_com_cs_v4_UI_JQuery_JQueryDialog$add_onClose(value) {
        /// <param name="value" type="Function" />
        this.__onClose$1 = ss.Delegate.combine(this.__onClose$1, value);
    },
    remove_onClose: function js_com_cs_v4_UI_JQuery_JQueryDialog$remove_onClose(value) {
        /// <param name="value" type="Function" />
        this.__onClose$1 = ss.Delegate.remove(this.__onClose$1, value);
    },
    
    __onClose$1: null,
    
    get_element: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_element() {
        /// <value type="jQuery"></value>
        return this._elem$1;
    },
    
    _jQueryDialog_OnClose$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_jQueryDialog_OnClose$1(dialog) {
        /// <param name="dialog" type="js.com.cs.v4.UI.JQuery.JQueryDialog">
        /// </param>
        if (this._destroyOnClose$1) {
            this.destroyDialogAndInnerContent();
        }
    },
    
    _beforeClose$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_beforeClose$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onBeforeClose$1 != null) {
            this.__onBeforeClose$1(this);
        }
    },
    
    _open$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_open$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.get_closeable()) {
            js.com.JQueryScriptSharpV2.jQueryUtil.select('.ui-dialog-titlebar-close', this.get_dialogBoxElement()).show();
        }
        else {
            js.com.JQueryScriptSharpV2.jQueryUtil.select('.ui-dialog-titlebar-close', this.get_dialogBoxElement()).hide();
        }
        if (this.get_showTitleBar()) {
            js.com.JQueryScriptSharpV2.jQueryUtil.select('.ui-dialog-titlebar', this.get_dialogBoxElement()).show();
        }
        else {
            js.com.JQueryScriptSharpV2.jQueryUtil.select('.ui-dialog-titlebar', this.get_dialogBoxElement()).hide();
        }
        if (this.__onOpen$1 != null) {
            this.__onOpen$1(this);
        }
    },
    
    _focus$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_focus$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onFocus$1 != null) {
            this.__onFocus$1(this);
        }
    },
    
    _dragStart$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_dragStart$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onDragStart$1 != null) {
            this.__onDragStart$1(this);
        }
    },
    
    _drag$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_drag$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onDrag$1 != null) {
            this.__onDrag$1(this);
        }
    },
    
    _dragStop$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_dragStop$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onDragStop$1 != null) {
            this.__onDragStop$1(this);
        }
    },
    
    _resizeStart$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_resizeStart$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onResizeStart$1 != null) {
            this.__onResizeStart$1(this);
        }
    },
    
    _resize$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_resize$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onResize$1 != null) {
            this.__onResize$1(this);
        }
    },
    
    _resizeStop$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_resizeStop$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onResizeStop$1 != null) {
            this.__onResizeStop$1(this);
        }
    },
    
    _close$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_close$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        js.com.cs.v4.Util.Console.log('CLOSE: ' + this.get_title());
        if (this.__onClose$1 != null) {
            this.__onClose$1(this);
        }
    },
    
    resizeDialog: function js_com_cs_v4_UI_JQuery_JQueryDialog$resizeDialog(width, height, updateIFrameHeightIfAny) {
        /// <param name="width" type="Number" integer="true">
        /// </param>
        /// <param name="height" type="Number" integer="true">
        /// </param>
        /// <param name="updateIFrameHeightIfAny" type="Boolean">
        /// </param>
        js.com.cs.v4.Util.jQueryUIUtil.dialogResize(this._elem$1.closest('.ui-dialog'), width, height, updateIFrameHeightIfAny);
    },
    
    centerDialogOnViewport: function js_com_cs_v4_UI_JQuery_JQueryDialog$centerDialogOnViewport() {
        js.com.cs.v4.Util.jQueryUIUtil.dialogCenterOnViewport(this._elem$1.closest('.ui-dialog'));
    },
    
    resizeDialogAndCenter: function js_com_cs_v4_UI_JQuery_JQueryDialog$resizeDialogAndCenter(width, height, updateIFrameHeightIfAny) {
        /// <param name="width" type="Number" integer="true">
        /// </param>
        /// <param name="height" type="Number" integer="true">
        /// </param>
        /// <param name="updateIFrameHeightIfAny" type="Boolean">
        /// </param>
        this.resizeDialog(width, height, updateIFrameHeightIfAny);
        this.centerDialogOnViewport();
    },
    
    _triggerClose$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_triggerClose$1() {
        /// <summary>
        /// Trigger the close event
        /// </summary>
        this.close();
    },
    
    setOkButton: function js_com_cs_v4_UI_JQuery_JQueryDialog$setOkButton(btnText) {
        /// <param name="btnText" type="String">
        /// </param>
        if (String.isNullOrEmpty(btnText)) {
            btnText = 'Ok';
        }
        var buttons = {};
        buttons[btnText] = ss.Delegate.create(this, this._triggerClose$1);
        this.setButtons(buttons);
    },
    
    setYesNoButtons: function js_com_cs_v4_UI_JQuery_JQueryDialog$setYesNoButtons(btnYesText, btnYesHandler, btnNoText) {
        /// <summary>
        /// Set yes / no buttons
        /// </summary>
        /// <param name="btnYesText" type="String">
        /// </param>
        /// <param name="btnYesHandler" type="Action">
        /// </param>
        /// <param name="btnNoText" type="String">
        /// The no button will close the dialog
        /// </param>
        var buttons = {};
        buttons[btnYesText] = btnYesHandler;
        buttons[btnNoText] = ss.Delegate.create(this, this._triggerClose$1);
        this.setButtons(buttons);
    },
    
    _getOption$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_getOption$1(optionName) {
        /// <param name="optionName" type="String">
        /// </param>
        /// <returns type="Object"></returns>
        return this._elem$1.dialog('option', optionName);
    },
    
    _setOption$1: function js_com_cs_v4_UI_JQuery_JQueryDialog$_setOption$1(optionName, value) {
        /// <param name="optionName" type="String">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        this._elem$1.dialog('option', optionName, value);
    },
    
    get_resizable: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_resizable() {
        /// <value type="Boolean"></value>
        return this._getOption$1('resizable');
    },
    set_resizable: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_resizable(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('resizable', value);
        return value;
    },
    
    get_autoOpen: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_autoOpen() {
        /// <value type="Boolean"></value>
        return this._getOption$1('autoOpen');
    },
    set_autoOpen: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_autoOpen(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('autoOpen', value);
        return value;
    },
    
    get_bgiframe: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_bgiframe() {
        /// <value type="Boolean"></value>
        return this._getOption$1('bgiframe');
    },
    set_bgiframe: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_bgiframe(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('bgiframe', value);
        return value;
    },
    
    get_getButtons: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_getButtons() {
        /// <value type="Object"></value>
        return this._getOption$1('buttons');
    },
    
    setButtons: function js_com_cs_v4_UI_JQuery_JQueryDialog$setButtons(buttons) {
        /// <param name="buttons" type="Object">
        /// The key is the label, the value is the callback
        /// </param>
        this._setOption$1('buttons', buttons);
    },
    
    get_dialogClass: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_dialogClass() {
        /// <value type="String"></value>
        return this._getOption$1('dialogClass');
    },
    set_dialogClass: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_dialogClass(value) {
        /// <value type="String"></value>
        this._setOption$1('dialogClass', value);
        return value;
    },
    
    get_closeText: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_closeText() {
        /// <value type="String"></value>
        return this._getOption$1('closeText');
    },
    set_closeText: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_closeText(value) {
        /// <value type="String"></value>
        this._setOption$1('closeText', value);
        return value;
    },
    
    get_closeOnEscape: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_closeOnEscape() {
        /// <value type="Boolean"></value>
        return this._getOption$1('closeOnEscape');
    },
    set_closeOnEscape: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_closeOnEscape(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('closeOnEscape', value);
        return value;
    },
    
    get_closeable: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_closeable() {
        /// <value type="Boolean"></value>
        return this._closeable$1;
    },
    set_closeable: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_closeable(value) {
        /// <value type="Boolean"></value>
        this._closeable$1 = value;
        this.set_closeOnEscape(value);
        return value;
    },
    
    _showTitleBar$1: true,
    
    get_showTitleBar: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_showTitleBar() {
        /// <value type="Boolean"></value>
        return this._showTitleBar$1;
    },
    set_showTitleBar: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_showTitleBar(value) {
        /// <value type="Boolean"></value>
        this._showTitleBar$1 = value;
        return value;
    },
    
    get_draggable: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_draggable() {
        /// <value type="Boolean"></value>
        return this._getOption$1('draggable');
    },
    set_draggable: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_draggable(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('draggable', value);
        return value;
    },
    
    get_stack: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_stack() {
        /// <value type="Boolean"></value>
        return this._getOption$1('stack');
    },
    set_stack: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_stack(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('stack', value);
        return value;
    },
    
    get_modal: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_modal() {
        /// <value type="Boolean"></value>
        return this._getOption$1('modal');
    },
    set_modal: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_modal(value) {
        /// <value type="Boolean"></value>
        this._setOption$1('modal', value);
        return value;
    },
    
    get_height: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_height() {
        /// <value type="Number"></value>
        return this._getOption$1('height');
    },
    set_height: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_height(value) {
        /// <value type="Number"></value>
        this._setOption$1('height', value);
        return value;
    },
    
    get_width: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_width() {
        /// <value type="Number"></value>
        return this._getOption$1('width');
    },
    set_width: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_width(value) {
        /// <value type="Number"></value>
        this._setOption$1('width', value);
        return value;
    },
    
    get_hideEffect: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_hideEffect() {
        /// <value type="js.com.JQueryScriptSharpV2.JQUERY_UI_EFFECT"></value>
        return js.com.JQueryScriptSharpV2.JQueryEnums.stringToJQueryUIEffect(this._getOption$1('hide'));
    },
    set_hideEffect: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_hideEffect(value) {
        /// <value type="js.com.JQueryScriptSharpV2.JQUERY_UI_EFFECT"></value>
        this._setOption$1('hide', js.com.JQueryScriptSharpV2.JQueryEnums.jQueryUIEffectToString(value));
        return value;
    },
    
    get_showEffect: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_showEffect() {
        /// <value type="js.com.JQueryScriptSharpV2.JQUERY_UI_EFFECT"></value>
        return js.com.JQueryScriptSharpV2.JQueryEnums.stringToJQueryUIEffect(this._getOption$1('show'));
    },
    set_showEffect: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_showEffect(value) {
        /// <value type="js.com.JQueryScriptSharpV2.JQUERY_UI_EFFECT"></value>
        this._setOption$1('show', js.com.JQueryScriptSharpV2.JQueryEnums.jQueryUIEffectToString(value));
        return value;
    },
    
    get_maxHeight: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_maxHeight() {
        /// <value type="Number"></value>
        return this._getOption$1('maxHeight');
    },
    set_maxHeight: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_maxHeight(value) {
        /// <value type="Number"></value>
        this._setOption$1('maxHeight', value);
        return value;
    },
    
    get_minHeight: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_minHeight() {
        /// <value type="Number"></value>
        return this._getOption$1('minHeight');
    },
    set_minHeight: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_minHeight(value) {
        /// <value type="Number"></value>
        this._setOption$1('minHeight', value);
        return value;
    },
    
    get_maxWidth: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_maxWidth() {
        /// <value type="Number"></value>
        return this._getOption$1('maxWidth');
    },
    set_maxWidth: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_maxWidth(value) {
        /// <value type="Number"></value>
        this._setOption$1('maxWidth', value);
        return value;
    },
    
    get_minWidth: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_minWidth() {
        /// <value type="Number"></value>
        return this._getOption$1('minWidth');
    },
    set_minWidth: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_minWidth(value) {
        /// <value type="Number"></value>
        this._setOption$1('minWidth', value);
        return value;
    },
    
    get_title: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_title() {
        /// <value type="String"></value>
        return this._getOption$1('title');
    },
    set_title: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_title(value) {
        /// <value type="String"></value>
        this._setOption$1('title', value);
        return value;
    },
    
    get_zIndex: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_zIndex() {
        /// <value type="Number" integer="true"></value>
        return this._getOption$1('zIndex');
    },
    set_zIndex: function js_com_cs_v4_UI_JQuery_JQueryDialog$set_zIndex(value) {
        /// <value type="Number" integer="true"></value>
        this._setOption$1('zIndex', value);
        return value;
    },
    
    setOpenPosition: function js_com_cs_v4_UI_JQuery_JQueryDialog$setOpenPosition(x, y) {
        /// <param name="x" type="js.com.JQueryScriptSharpV2.JQUERY_POSITION">
        /// </param>
        /// <param name="y" type="js.com.JQueryScriptSharpV2.JQUERY_POSITION">
        /// </param>
        if (ss.isNullOrUndefined(y)) {
            this._setOption$1('position', js.com.JQueryScriptSharpV2.JQueryEnums.jQueryPositionToString(x));
        }
        else {
            var valX = x;
            var valY = y;
            if (Type.canCast(x, js.com.JQueryScriptSharpV2.JQUERY_POSITION)) {
                valX = js.com.JQueryScriptSharpV2.JQueryEnums.jQueryPositionToString(x);
            }
            if (Type.canCast(y, js.com.JQueryScriptSharpV2.JQUERY_POSITION)) {
                valY = js.com.JQueryScriptSharpV2.JQueryEnums.jQueryPositionToString(y);
            }
            var values = [];
            values[0] = valX;
            values[1] = valY;
            this._setOption$1('position', values);
        }
    },
    
    close: function js_com_cs_v4_UI_JQuery_JQueryDialog$close() {
        this._elem$1.dialog('close');
    },
    
    open: function js_com_cs_v4_UI_JQuery_JQueryDialog$open() {
        this._elem$1.dialog('open');
    },
    
    destroyDialogAndInnerContent: function js_com_cs_v4_UI_JQuery_JQueryDialog$destroyDialogAndInnerContent() {
        if (!this.get_destroyed()) {
            this._elem$1.remove();
            this.destroy();
        }
    },
    
    destroy: function js_com_cs_v4_UI_JQuery_JQueryDialog$destroy() {
        if (!this.get_destroyed()) {
            this._elem$1.dialog('destroy');
        }
        js.com.cs.v4.UI.JQuery.JQueryDialog.callBaseMethod(this, 'destroy');
    },
    
    _dialogBoxElement$1: null,
    
    get_dialogBoxElement: function js_com_cs_v4_UI_JQuery_JQueryDialog$get_dialogBoxElement() {
        /// <value type="jQuery"></value>
        if (this._dialogBoxElement$1 == null) {
            this._dialogBoxElement$1 = this.get_element().closest('.ui-dialog');
        }
        return this._dialogBoxElement$1;
    }
}


Type.registerNamespace('js.com.cs.v4.UI.JQuery.prettySociable');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable

js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable = function js_com_cs_v4_UI_JQuery_prettySociable_PrettySociable() {
    /// <field name="_SETTINGS" type="js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings" static="true">
    /// </field>
}
js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.init = function js_com_cs_v4_UI_JQuery_prettySociable_PrettySociable$init(settings) {
    /// <param name="settings" type="js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings">
    /// </param>
    var method = jQuery;
    var p = [];
    if (!ss.isNullOrUndefined(settings)) {
        method.prettySociable(settings);
    }
    else {
        method.prettySociable();
    }
}
js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot = function js_com_cs_v4_UI_JQuery_prettySociable_PrettySociable$_makeIconURLFromRoot(id) {
    /// <param name="id" type="String">
    /// </param>
    var iconURL = (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites[id]).icon;
    if (!iconURL.startsWith('/')) {
        iconURL = '/' + iconURL;
    }
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites[id]).icon = iconURL;
}
js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.initWithDefaultNetworks = function js_com_cs_v4_UI_JQuery_prettySociable_PrettySociable$initWithDefaultNetworks() {
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.init();
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['facebook']).active = true;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['twitter']).active = true;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['delicious']).active = false;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['digg']).active = false;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['linkedin']).active = false;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['reddit']).active = false;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['stumbleupon']).active = false;
    (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings().websites['tumblr']).active = false;
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('facebook');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('twitter');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('delicious');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('digg');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('linkedin');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('reddit');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('stumbleupon');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._makeIconURLFromRoot('tumblr');
    js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.init(js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings());
}
js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.get_settings = function js_com_cs_v4_UI_JQuery_prettySociable_PrettySociable$get_settings() {
    /// <value type="js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings"></value>
    try {
        return jQuery.prettySociable.settings;
    }
    catch (ex) {
        if (js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._SETTINGS == null) {
            js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._SETTINGS = {};
            js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._SETTINGS.websites = {};
        }
        return js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._SETTINGS;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableIconSize

js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableIconSize = function js_com_cs_v4_UI_JQuery_prettySociable__PrettySociableIconSize() {
    /// <field name="width" type="Number" integer="true">
    /// </field>
    /// <field name="height" type="Number" integer="true">
    /// </field>
}
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableIconSize.prototype = {
    width: 0,
    height: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.prettySociable._PrettySociablePopupSettings

js.com.cs.v4.UI.JQuery.prettySociable._PrettySociablePopupSettings = function js_com_cs_v4_UI_JQuery_prettySociable__PrettySociablePopupSettings() {
    /// <field name="width" type="Number" integer="true">
    /// </field>
    /// <field name="height" type="Number" integer="true">
    /// </field>
}
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociablePopupSettings.prototype = {
    width: 0,
    height: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings

js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings = function js_com_cs_v4_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.v4.UI.JQuery.prettySociable._PrettySociableTooltipOffset">
    /// </field>
    /// <field name="popup" type="js.com.cs.v4.UI.JQuery.prettySociable._PrettySociablePopupSettings">
    /// </field>
    /// <field name="callback" type="EventHandler">
    /// </field>
}
js.com.cs.v4.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.v4.UI.JQuery.prettySociable._PrettySociableTooltipOffset

js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableTooltipOffset = function js_com_cs_v4_UI_JQuery_prettySociable__PrettySociableTooltipOffset() {
    /// <field name="offsetTop" type="Number" integer="true">
    /// </field>
    /// <field name="offsetLeft" type="Number" integer="true">
    /// </field>
}
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableTooltipOffset.prototype = {
    offsetTop: 0,
    offsetLeft: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableWebsiteSettings

js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableWebsiteSettings = function js_com_cs_v4_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.v4.UI.JQuery.prettySociable._PrettySociableIconSize">
    /// </field>
}
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableWebsiteSettings.prototype = {
    active: false,
    encode: null,
    title: null,
    url: null,
    icon: null,
    sizes: null
}


Type.registerNamespace('js.com.cs.v4.UI.KeywordSuggest');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest

js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest = function js_com_cs_v4_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.v4.Classes.Geom.Point">
    /// </field>
    /// <field name="_txtKeywords" type="js.com.cs.v4.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.v4.UI.KeywordSuggest.KeywordSuggestResults">
    /// </field>
    if (!String.isNullOrEmpty(keywordsParam)) {
        this.keywordsParam = keywordsParam;
    }
    if (Type.canCast(txtKeywords, js.com.cs.v4.Controls.Common.MyElement)) {
        this._txtKeywords = txtKeywords;
    }
    else {
        this._txtKeywords = new js.com.cs.v4.Controls.Form.MyTextBoxSingleLine(txtKeywords);
    }
    this._keywordSuggestURL = keywordsSuggestURL;
    this._keywordsDelayMS = keywordsDelayMS;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest.prototype = {
    _offset: null,
    
    get_offset: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$get_offset() {
        /// <value type="js.com.cs.v4.Classes.Geom.Point"></value>
        return this._offset;
    },
    set_offset: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$set_offset(value) {
        /// <value type="js.com.cs.v4.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_v4_UI_KeywordSuggest_KeywordSuggest$get_txtKeywords() {
        /// <value type="js.com.cs.v4.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_v4_UI_KeywordSuggest_KeywordSuggest$_initHandlers() {
        this._txtKeywords.add_onChangeEvenWithKeys(ss.Delegate.create(this, this._txtKeywords_OnChangeEvenWithKeys));
        this._txtKeywords.add_onBlur(ss.Delegate.create(this, this._txtKeywords_onBlur));
        this._txtKeywords.set_autoComplete(false);
    },
    
    _txtKeywords_onBlur: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_txtKeywords_onBlur(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._results.hideResults();
    },
    
    _initResults: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_initResults() {
        this._results = new js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResults(this._txtKeywords.get_element(), this);
        this._results.set_offset(this._offset);
        this._results.add_onResultHighlightChange(ss.Delegate.create(this, this._results_OnResultHighlightChange));
        this._results.add_onResultClicked(ss.Delegate.create(this, this._results_OnResultClicked));
    },
    
    _results_OnResultClicked: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_results_OnResultClicked(result) {
        /// <param name="result" type="js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult">
        /// </param>
        this._txtKeywords.set_value(result.get_keywords());
        this._txtKeywords.focus();
        js.com.cs.v4.UI.Forms.FormsCollection.get_instance().clickCurrentFormDefaultButton();
    },
    
    _results_OnResultHighlightChange: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_results_OnResultHighlightChange(result) {
        /// <param name="result" type="js.com.cs.v4.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_v4_UI_KeywordSuggest_KeywordSuggest$_keywordsSuggestResponse(data, textStatus) {
        /// <param name="data" type="Object">
        /// </param>
        /// <param name="textStatus" type="String">
        /// </param>
        var keywords = data['data'];
        if (!ss.isNullOrUndefined(keywords) && keywords.length > 0) {
            this._results.showNewResults(keywords);
        }
        else {
            this._results.hideResults();
        }
    },
    
    _submitRequest: function js_com_cs_v4_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, ss.Delegate.create(this, this._keywordsSuggestResponse), 'json');
        }
        this._changeByArrowKeys = false;
    },
    
    _checkInputChange: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_checkInputChange() {
        if (this._txtKeywords.get_value() !== this._lastCheckedKeywords) {
            window.clearTimeout(this._delayHandler);
            this._delayHandler = window.setTimeout(ss.Delegate.create(this, this._submitRequest), this._keywordsDelayMS);
        }
    },
    
    _txtKeywords_OnChangeEvenWithKeys: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_txtKeywords_OnChangeEvenWithKeys(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._checkInputChange();
    },
    
    _init: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggest$_init() {
        this._initResults();
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult

js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult = function js_com_cs_v4_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.v4.UI.KeywordSuggest.KeywordSuggestResult.initializeBase(this);
    this._keywords$2 = keywords;
    this._index$2 = index;
    this.addClass('keyword-suggest-result');
    this.set_innerHTML(keywords);
    this.get_jQueryElement().ready(ss.Delegate.create(this, this._init$2));
}
js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult.prototype = {
    _keywords$2: null,
    
    get_keywords: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResult$get_keywords() {
        /// <value type="String"></value>
        return this._keywords$2;
    },
    
    _index$2: 0,
    
    get_index: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResult$get_index() {
        /// <value type="Number" integer="true"></value>
        return this._index$2;
    },
    
    _initHandlers$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResult$_initHandlers$2() {
    },
    
    _keywordSuggestResult_onMouseLeave$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResult$_keywordSuggestResult_onMouseLeave$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
    },
    
    _keywordSuggestResult_onMouseEnter$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResult$_keywordSuggestResult_onMouseEnter$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
    },
    
    _init$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResult$_init$2() {
        this._initHandlers$2();
    },
    
    highlight: function js_com_cs_v4_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.v4.UI.KeywordSuggest.KeywordSuggestResults

js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResults = function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults(wrapAroundElement, keywordSuggest) {
    /// <param name="wrapAroundElement" type="Object" domElement="true">
    /// </param>
    /// <param name="keywordSuggest" type="js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest">
    /// </param>
    /// <field name="_offset$2" type="js.com.cs.v4.Classes.Geom.Point">
    /// </field>
    /// <field name="__onResultHighlightChange$2" type="js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResultHandler">
    /// </field>
    /// <field name="__onResultClicked$2" type="js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResultHandler">
    /// </field>
    /// <field name="_wrapAroundElement$2" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </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.v4.UI.KeywordSuggest.KeywordSuggestResult">
    /// </field>
    /// <field name="_keywordSuggest$2" type="js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest">
    /// </field>
    this._keywordResults$2 = [];
    js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResults.initializeBase(this);
    this._keywordSuggest$2 = keywordSuggest;
    this._wrapAroundElement$2 = new js.com.cs.v4.Controls.Common.MyElement(wrapAroundElement);
    this.addClass('keyword-suggest-results');
    this.get_style().position = 'absolute';
    this._wrapAroundElement$2.get_jQueryElement().ready(ss.Delegate.create(this, this._init$2));
}
js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResults.prototype = {
    _offset$2: null,
    
    get_offset: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$get_offset() {
        /// <value type="js.com.cs.v4.Classes.Geom.Point"></value>
        return this._offset$2;
    },
    set_offset: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$set_offset(value) {
        /// <value type="js.com.cs.v4.Classes.Geom.Point"></value>
        this._offset$2 = value;
        return value;
    },
    
    add_onResultHighlightChange: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$add_onResultHighlightChange(value) {
        /// <param name="value" type="Function" />
        this.__onResultHighlightChange$2 = ss.Delegate.combine(this.__onResultHighlightChange$2, value);
    },
    remove_onResultHighlightChange: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$remove_onResultHighlightChange(value) {
        /// <param name="value" type="Function" />
        this.__onResultHighlightChange$2 = ss.Delegate.remove(this.__onResultHighlightChange$2, value);
    },
    
    __onResultHighlightChange$2: null,
    
    add_onResultClicked: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$add_onResultClicked(value) {
        /// <param name="value" type="Function" />
        this.__onResultClicked$2 = ss.Delegate.combine(this.__onResultClicked$2, value);
    },
    remove_onResultClicked: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$remove_onResultClicked(value) {
        /// <param name="value" type="Function" />
        this.__onResultClicked$2 = ss.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_v4_UI_KeywordSuggest_KeywordSuggestResults$_updatePosition$2() {
        if (this._showing$2) {
            var pos = this._wrapAroundElement$2.get_jQueryElement().offset();
            var keywordsPos = new js.com.cs.v4.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_v4_UI_KeywordSuggest_KeywordSuggestResults$_clearResults$2() {
        while (this._keywordResults$2.length > 0) {
            var kr = js.com.cs.v4.Util.ArrayUtil.pop(this._keywordResults$2);
            kr.remove_onMouseEnter(ss.Delegate.create(this, this._kr_onMouseEnter$2));
            kr.remove_onMouseLeave(ss.Delegate.create(this, this._kr_onMouseLeave$2));
            kr.get_jQueryElement().remove();
        }
    },
    
    showNewResults: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$showNewResults(results) {
        /// <param name="results" type="Array" elementType="String">
        /// </param>
        this._currHighlighted$2 = null;
        if (results == null || !results.length) {
            this.hideResults();
        }
        else {
            this._showing$2 = true;
            this._clearResults$2();
            for (var i = 0; i < results.length; i++) {
                var kr = new js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult(results[i], i);
                kr.add_onMouseEnter(ss.Delegate.create(this, this._kr_onMouseEnter$2));
                kr.add_onMouseLeave(ss.Delegate.create(this, this._kr_onMouseLeave$2));
                kr.add_onMouseDown(ss.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_v4_UI_KeywordSuggest_KeywordSuggestResults$_kr_onMouseDown$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var kr = e.data;
        if (this.__onResultClicked$2 != null) {
            this.__onResultClicked$2(kr);
        }
    },
    
    _kr_onMouseLeave$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$_kr_onMouseLeave$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.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_v4_UI_KeywordSuggest_KeywordSuggestResults$_kr_onMouseEnter$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var kr = e.data;
        this._highlightResult$2(kr, false);
    },
    
    _highlightResult$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$_highlightResult$2(kr, triggerEvent) {
        /// <param name="kr" type="js.com.cs.v4.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(this._currHighlighted$2);
            }
            this.showResults();
        }
    },
    
    showResults: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$showResults() {
        if (this.get_element().parentNode !== document.body) {
            document.body.appendChild(this.get_element());
        }
        if (this._init$2) {
            this._init$2 = false;
        }
        this.get_jQueryElement().slideDown(250);
        this._showing$2 = true;
    },
    
    hideResults: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$hideResults() {
        this._showing$2 = false;
        this.get_jQueryElement().slideUp(250);
    },
    
    _init$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$_init$2() {
        try {
            this.get_jQueryElement().bgiframe();
        }
        catch (ex) {
        }
        js.com.cs.v4.Util.WindowUtil.get_windowElement().add_onResize(ss.Delegate.create(this, this._windowUtil_onResize$2));
        js.com.cs.v4.Util.WindowUtil.get_windowElement().add_onScroll(ss.Delegate.create(this, this._windowUtil_onScroll$2));
        js.com.cs.v4.Util.DOMUtil.get_document().add_onKeyDown(ss.Delegate.create(this, this._document_onKeyDown$2));
    },
    
    _document_onKeyDown$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$_document_onKeyDown$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._keywordSuggest$2.get_txtKeywords().get_hasFocus()) {
            if (e.which === js.com.cs.v4.Enums.KEY.dowN_ARROW) {
                this._incrementHighlight$2(1);
            }
            else if (e.which === js.com.cs.v4.Enums.KEY.uP_ARROW) {
                this._incrementHighlight$2(-1);
            }
        }
    },
    
    _incrementHighlight$2: function js_com_cs_v4_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_v4_UI_KeywordSuggest_KeywordSuggestResults$_windowUtil_onScroll$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._updatePosition$2();
    },
    
    _windowUtil_onResize$2: function js_com_cs_v4_UI_KeywordSuggest_KeywordSuggestResults$_windowUtil_onResize$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._updatePosition$2();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.KeywordSuggest._KeywordSuggestResponse

js.com.cs.v4.UI.KeywordSuggest._KeywordSuggestResponse = function js_com_cs_v4_UI_KeywordSuggest__KeywordSuggestResponse() {
    /// <field name="keyword" type="String">
    /// </field>
}
js.com.cs.v4.UI.KeywordSuggest._KeywordSuggestResponse.prototype = {
    keyword: null
}


Type.registerNamespace('js.com.cs.v4.UI.LinkedDropdowns.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownSelectData

js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownSelectData = function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdownSelectData() {
    /// <field name="id" type="String">
    /// </field>
    /// <field name="emptyText" type="String">
    /// </field>
    /// <field name="initialSelectedValue" type="String">
    /// </field>
    /// <field name="selectElement" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
}
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownSelectData.prototype = {
    id: null,
    emptyText: null,
    initialSelectedValue: null,
    selectElement: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown

js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown = function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters">
    /// </param>
    /// <field name="_parameters$1" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters">
    /// </field>
    /// <field name="_cmb$1" type="js.com.cs.v4.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="_childLevel$1" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown">
    /// </field>
    /// <field name="_selectedValue$1" type="String">
    /// </field>
    /// <field name="_selectData$1" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownSelectData">
    /// </field>
    js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown.initializeBase(this);
    this._parameters$1 = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init$1));
}
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown.prototype = {
    _parameters$1: null,
    _cmb$1: null,
    _childLevel$1: null,
    _selectedValue$1: null,
    _selectData$1: null,
    
    _initControl$1: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown$_initControl$1() {
        this._selectData$1 = this._parameters$1.selectElementsData[this._parameters$1.levelIndex];
        this._cmb$1 = this._selectData$1.selectElement;
        this._cmb$1.clearItems();
        var children = this._parameters$1.parentSelectedData.childData;
        if (children != null && children.length > 0) {
            for (var i = 0; i < children.length; i++) {
                this._cmb$1.addItem(children[i].text, children[i].value);
            }
        }
        else {
            this._cmb$1.set_disabled(true);
            this._cmb$1.addItem(this._selectData$1.emptyText);
        }
        if (!String.isNullOrEmpty(this._selectData$1.initialSelectedValue)) {
            this._cmb$1.set_value(this._selectData$1.initialSelectedValue);
        }
        if (this._parameters$1.selectElementsData.length > this._parameters$1.levelIndex + 1) {
            this._cmb$1.add_onChangeEvenWithKeys(ss.Delegate.create(this, this._cmb_OnChangeEvenWithKeys$1));
            this._updateChildLevel$1();
        }
    },
    
    _cmb_OnChangeEvenWithKeys$1: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown$_cmb_OnChangeEvenWithKeys$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._updateChildLevel$1();
    },
    
    _getSelectedItemDataFromValue$1: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown$_getSelectedItemDataFromValue$1(value) {
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData"></returns>
        var children = this._parameters$1.parentSelectedData.childData;
        for (var i = 0; i < children.length; i++) {
            if (children[i].value === value) {
                return children[i];
            }
        }
        return null;
    },
    
    _updateChildLevel$1: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown$_updateChildLevel$1() {
        var selectedValue = this._cmb$1.get_value();
        if (this._selectedValue$1 !== selectedValue) {
            this._selectedValue$1 = selectedValue;
            if (this._childLevel$1 != null) {
                this._childLevel$1.destroy();
            }
            var selectedData = this._getSelectedItemDataFromValue$1(selectedValue);
            var childLevelParams = new js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters();
            childLevelParams.levelIndex = this._parameters$1.levelIndex + 1;
            childLevelParams.parentSelectedData = selectedData;
            childLevelParams.linkedDropdowns = this._parameters$1.linkedDropdowns;
            childLevelParams.selectElementsData = this._parameters$1.selectElementsData;
            this._childLevel$1 = new js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown(childLevelParams);
        }
    },
    
    _init$1: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown$_init$1() {
        this._initControl$1();
    },
    
    destroy: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdown$destroy() {
        this._cmb$1.remove_onChangeEvenWithKeys(ss.Delegate.create(this, this._cmb_OnChangeEvenWithKeys$1));
        js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData

js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData = function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdownItemData() {
    /// <field name="text" type="String">
    /// </field>
    /// <field name="value" type="String">
    /// </field>
    /// <field name="childData" type="Array" elementType="LinkedDropdownItemData">
    /// </field>
}
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData.prototype = {
    text: null,
    value: null,
    childData: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters

js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters = function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdownParameters() {
    /// <field name="linkedDropdowns" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdowns">
    /// </field>
    /// <field name="selectElementsData" type="Array" elementType="LinkedDropdownSelectData">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="parentSelectedData" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData">
    /// </field>
}
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters.prototype = {
    linkedDropdowns: null,
    selectElementsData: null,
    levelIndex: 0,
    parentSelectedData: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdowns

js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdowns = function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdowns(parameters) {
    /// <param name="parameters" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters">
    /// </param>
    /// <field name="_parameters" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters">
    /// </field>
    /// <field name="_rootLevel" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown">
    /// </field>
    this._parameters = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdowns.prototype = {
    _parameters: null,
    
    get_parameters: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdowns$get_parameters() {
        /// <value type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters"></value>
        return this._parameters;
    },
    
    _rootLevel: null,
    
    _initControls: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdowns$_initControls() {
        if (this._parameters.selectElementsData != null && this._parameters.selectElementsData.length > 0) {
            for (var i = 0; i < this._parameters.selectElementsData.length; i++) {
                var select = new js.com.cs.v4.Controls.Form.MyDropDownList(this._parameters.selectElementsData[i].id);
                this._parameters.selectElementsData[i].selectElement = select;
            }
            var rootLevelParams = new js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters();
            rootLevelParams.levelIndex = 0;
            rootLevelParams.linkedDropdowns = this;
            rootLevelParams.parentSelectedData = this._parameters.data;
            rootLevelParams.selectElementsData = this._parameters.selectElementsData;
            this._rootLevel = new js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown(rootLevelParams);
        }
        else {
            throw new Error('Please specify at least one selectElement');
        }
    },
    
    _init: function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdowns$_init() {
        this._initControls();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters

js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters = function js_com_cs_v4_UI_LinkedDropdowns_v1_LinkedDropdownsParameters() {
    /// <field name="selectElementsData" type="Array" elementType="LinkedDropdownSelectData">
    /// These are the list of select element IDs (different levels)
    /// </field>
    /// <field name="data" type="js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData">
    /// </field>
}
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters.prototype = {
    selectElementsData: null,
    data: null
}


Type.registerNamespace('js.com.cs.v4.UI.MediaGallery.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryFunctionality

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryFunctionality = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality(gallery, settings) {
    /// <param name="gallery" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallery">
    /// </param>
    /// <param name="settings" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings">
    /// </param>
    /// <field name="_settings" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings">
    /// </field>
    /// <field name="_gallery" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallery">
    /// </field>
    /// <field name="_tabs" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs">
    /// </field>
    /// <field name="_divGalleryItemSections" type="js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryFunctionality.prototype = {
    _settings: null,
    
    get_settings: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$get_settings() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings"></value>
        return this._settings;
    },
    set_settings: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$set_settings(value) {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings"></value>
        this._settings = value;
        return value;
    },
    
    _gallery: null,
    _tabs: null,
    _divGalleryItemSections: null,
    _sections: null,
    
    get_sections: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$get_sections() {
        /// <value type="Array" elementType="MediaGalleryItemSection"></value>
        return this._sections;
    },
    set_sections: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$set_sections(value) {
        /// <value type="Array" elementType="MediaGalleryItemSection"></value>
        this._sections = value;
        return value;
    },
    
    _initSectionsContainer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$_initSectionsContainer() {
        this._divGalleryItemSections = new js.com.cs.v4.Controls.Common.MyDivElement();
        this._divGalleryItemSections.addClass('cs-media-gallery-sections');
        this._gallery.appendChild(this._divGalleryItemSections);
    },
    
    _initInitialImages: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$_initInitialImages() {
        if (!ss.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_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$_getDefaultSettings() {
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings"></returns>
        var settings = new js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings();
        settings.sections = [];
        return settings;
    },
    
    _initContainer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$_initContainer() {
        this._gallery.addClass('cs-media-gallery');
    },
    
    _initTabs: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$_initTabs() {
        this._tabs = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs();
    },
    
    getSectionByID: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$getSectionByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection"></returns>
        if (ss.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_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$getSectionByTitle(title) {
        /// <param name="title" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection"></returns>
        if (ss.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_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$createNewSection(sectionData) {
        /// <param name="sectionData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection"></returns>
        var sect = new js.com.cs.v4.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_v4_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");
        }
    },
    
    getMediaGalleryItemFromElement: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$getMediaGalleryItemFromElement(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        for (var i = 0; i < this._sections.length; i++) {
            var item = this._sections[i].get_functionality().getMediaGalleryItemFromElement(elem);
            if (item != null) {
                return item;
            }
        }
        return null;
    },
    
    getMediaGalleryItemFromID: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$getMediaGalleryItemFromID(ID) {
        /// <param name="ID" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$getMediaGalleryItemFromData(itemData) {
        /// <param name="itemData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        if (itemData == null) {
            return null;
        }
        return this.getMediaGalleryItemFromID(itemData.id);
    },
    
    addItem: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$addItem(item, sectionData) {
        /// <param name="item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
        /// </param>
        /// <param name="sectionData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData">
        /// </param>
        if (!(Type.canCast(item, js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem))) {
            var itemData = item;
            item = new js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryFunctionality$init() {
        this._initTabs();
        this._initSectionsContainer();
        this._initInitialImages();
        this._initContainer();
        this._tabs.get_functionality().selectInitialTab();
        this._checkScriptErrors();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGallery

js.com.cs.v4.UI.MediaGallery.v1.MediaGallery = function js_com_cs_v4_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.v4.UI.MediaGallery.v1.MediaGalleryFunctionality">
    /// </field>
    js.com.cs.v4.UI.MediaGallery.v1.MediaGallery.initializeBase(this);
    if (!(Type.canCast(cropScript, String))) {
        this._init$2(cropScript);
    }
    else {
        var settings = new js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGallery.replaceElementWithMediaGallery = function js_com_cs_v4_UI_MediaGallery_v1_MediaGallery$replaceElementWithMediaGallery(elementID, settings) {
    /// <param name="elementID" type="String">
    /// </param>
    /// <param name="settings" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings">
    /// </param>
    /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallery"></returns>
    var domElem = new js.com.cs.v4.Controls.Common.MyElement(elementID);
    var mg = new js.com.cs.v4.UI.MediaGallery.v1.MediaGallery(settings);
    js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings.updateAlternateContentFromIds(settings.sections);
    domElem.clear();
    domElem.appendChild(mg);
    mg.init();
    return mg;
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGallery.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v4_UI_MediaGallery_v1_MediaGallery$get_functionality() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryFunctionality"></value>
        return this._functionality$2;
    },
    
    _init$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGallery$_init$2(settings) {
        /// <param name="settings" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings">
        /// </param>
        this._functionality$2 = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryFunctionality(this, settings);
    },
    
    init: function js_com_cs_v4_UI_MediaGallery_v1_MediaGallery$init() {
        this._functionality$2.init();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality(item, data) {
    /// <param name="item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
    /// </param>
    /// <param name="data" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData">
    /// </param>
    /// <field name="__onDelete" type="js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </field>
    /// <field name="_item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
    /// </field>
    /// <field name="_data" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData">
    /// </field>
    /// <field name="_aThumb" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_imgThumb" type="js.com.cs.v4.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_divImage" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divCaption" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_divButtons" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_aCrop" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aDelete" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aReorder" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_cropController" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController">
    /// </field>
    /// <field name="_index" type="Number" integer="true">
    /// </field>
    this._item = item;
    this._data = data;
    this.init();
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality.prototype = {
    
    add_onDelete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$add_onDelete(value) {
        /// <param name="value" type="Function" />
        this.__onDelete = ss.Delegate.combine(this.__onDelete, value);
    },
    remove_onDelete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$remove_onDelete(value) {
        /// <param name="value" type="Function" />
        this.__onDelete = ss.Delegate.remove(this.__onDelete, value);
    },
    
    __onDelete: null,
    _section: null,
    
    get_section: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_section() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        return this._section;
    },
    set_section: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_section(value) {
        /// <value type="js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_aCrop() {
        /// <value type="js.com.cs.v4.Controls.Common.MyAnchorElement"></value>
        return this._aCrop;
    },
    set_aCrop: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_aCrop(value) {
        /// <value type="js.com.cs.v4.Controls.Common.MyAnchorElement"></value>
        this._aCrop = value;
        return value;
    },
    
    _aDelete: null,
    
    get_aDelete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_aDelete() {
        /// <value type="js.com.cs.v4.Controls.Common.MyAnchorElement"></value>
        return this._aDelete;
    },
    set_aDelete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_aDelete(value) {
        /// <value type="js.com.cs.v4.Controls.Common.MyAnchorElement"></value>
        this._aDelete = value;
        return value;
    },
    
    _aReorder: null,
    
    get_aReorder: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_aReorder() {
        /// <value type="js.com.cs.v4.Controls.Common.MyAnchorElement"></value>
        return this._aReorder;
    },
    set_aReorder: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_aReorder(value) {
        /// <value type="js.com.cs.v4.Controls.Common.MyAnchorElement"></value>
        this._aReorder = value;
        return value;
    },
    
    get_data: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_data() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData"></value>
        return this._data;
    },
    
    _cropController: null,
    _index: 0,
    
    get_index: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_index() {
        /// <value type="Number" integer="true"></value>
        return this._index;
    },
    set_index: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$set_index(value) {
        /// <value type="Number" integer="true"></value>
        if (!ss.isNullOrUndefined(this._index)) {
            this._item.removeClass(this._getImageCssClass());
        }
        this._index = value;
        this._item.addClass(this._getImageCssClass());
        this._item.get_jQueryElement().ready(ss.Delegate.create(this, this._updateShadowBoxTag));
        return value;
    },
    
    _getImageCssClass: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_getImageCssClass() {
        /// <returns type="String"></returns>
        return 'image' + this._index;
    },
    
    _initContainer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initContainer() {
        this._item.addClass('cs-media-gallery-item');
    },
    
    _checkScriptErrors: function js_com_cs_v4_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.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_DELETE_SHOWN) {
            js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CROP_SHOWN) {
            js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_REORDER_SHOWN) {
            js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CAPTION_SHOWN) {
            js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CAPTION_SHOWN = true;
            alert("Please specify 'captionScript' setting in order to handle items");
        }
    },
    
    _updateShadowBoxTag: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_updateShadowBoxTag() {
        if (this.get_section() != null) {
            js.com.cs.v4.Util.jQueryShadowBoxUtil.updateRelTag(this._aThumb.get_element(), 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_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initImage() {
        this._divImage = new js.com.cs.v4.Controls.Common.MyDivElement();
        this._divImage.addClass('cs-media-gallery-item-image');
        this._aThumb = new js.com.cs.v4.Controls.Common.MyAnchorElement();
        this._imgThumb = new js.com.cs.v4.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.v4.Controls.Common.HREF_TARGET.blank);
        this._aThumb.addClass(js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.a_HREF_LINK);
        this._divImage.appendChild(this._aThumb);
        this._item.appendChild(this._divImage);
    },
    
    setupShadowbox: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$setupShadowbox() {
        var opts = {};
        opts.skipSetup = true;
        js.com.cs.v4.Util.jQueryShadowBoxUtil.initShadowBox(opts);
        opts.skipSetup = false;
        var cssSelector = '.' + this._getImageCssClass() + ' a.' + js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.a_HREF_LINK;
        Shadowbox.setup(cssSelector, opts);
    },
    
    _initEditableCaption: function js_com_cs_v4_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 = ss.Delegate.create(this, this._onEditCaptionReady);
            editSettings.onerror = ss.Delegate.create(this, this._onEditCaptionError);
            editSettings.onreset = ss.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(ss.Delegate.create(this, this._divCaption_onMouseOver));
            this._divCaption.add_onMouseLeave(ss.Delegate.create(this, this._divCaption_onMouseLeave));
            this._divCaption.add_onClick(ss.Delegate.create(this, this._divCaption_onClick));
        }
    },
    
    _resetCaptionEditingClass: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_resetCaptionEditingClass() {
        this._divCaption.removeClass('cs-media-gallery-item-caption-editing');
    },
    
    _onEditCaptionReady: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_onEditCaptionReady(value, settings) {
        /// <param name="value" type="String">
        /// </param>
        /// <param name="settings" type="js.com.JQueryScriptSharpV2._jEditableSettings">
        /// </param>
        this._resetCaptionEditingClass();
    },
    
    _onEditCaptionError: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_onEditCaptionError(settings, original, xhr) {
        /// <param name="settings" type="js.com.JQueryScriptSharpV2._jEditableSettings">
        /// </param>
        /// <param name="original" type="String">
        /// </param>
        /// <param name="xhr" type="XMLHttpRequest">
        /// </param>
        this._resetCaptionEditingClass();
    },
    
    _onEditCaptionReset: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_onEditCaptionReset(settings, original) {
        /// <param name="settings" type="js.com.JQueryScriptSharpV2._jEditableSettings">
        /// </param>
        /// <param name="original" type="String">
        /// </param>
        this._resetCaptionEditingClass();
    },
    
    _divCaption_onClick: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_divCaption_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._divCaption.addClass('cs-media-gallery-item-caption-editing');
    },
    
    _divCaption_onMouseLeave: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_divCaption_onMouseLeave(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._divCaption.removeClass('cs-media-gallery-item-caption-over');
    },
    
    _divCaption_onMouseOver: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_divCaption_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._divCaption.addClass('cs-media-gallery-item-caption-over');
    },
    
    _initCaption: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initCaption() {
        this._divCaption = new js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_getButton(css) {
        /// <param name="css" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.Controls.Common.MyAnchorElement"></returns>
        var aBtn = new js.com.cs.v4.Controls.Common.MyAnchorElement();
        aBtn.addClass('cs-media-gallery-item-button');
        aBtn.addClass(css);
        aBtn.set_href('javascript:');
        return aBtn;
    },
    
    _initDelete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initDelete() {
        this._aDelete = this._getButton('delete');
        this._aDelete.add_onClick(ss.Delegate.create(this, this._aDelete_onClick));
        (this._data.buttons).insert(0, this._aDelete);
    },
    
    _aDelete_onClick: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_aDelete_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._aDelete.remove_onClick(ss.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 (ss.isNullOrUndefined(settings.deleteScriptExtraParams)) {
                settings.deleteScriptExtraParams = {};
            }
            settings.deleteScriptExtraParams[settings.deleteScriptIdParam] = this.get_data().id;
            this._item.setOpacity(0.25);
            jQuery.get(settings.deleteScript, settings.deleteScriptExtraParams, ss.Delegate.create(this, this._deleteResponse), 'json');
        }
        this.unSelect();
    },
    
    _deleteResponse: function js_com_cs_v4_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(this._item);
            }
        }
        else {
            alert(settings.deleteItemErrorMessage);
            this._aDelete.add_onClick(ss.Delegate.create(this, this._aDelete_onClick));
        }
    },
    
    _initCrop: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initCrop() {
        if (!ss.isNullOrUndefined(this._data.cropSizes) && this._data.cropSizes.length > 0) {
            this._aCrop = this._getButton('crop');
            this._cropController = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController(this._item, this._aCrop);
            (this._data.buttons).insert(0, this._aCrop);
        }
    },
    
    _initReorder: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initReorder() {
        this._aReorder = this._getButton(js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.csS_BTN_REORDER);
        (this._data.buttons).insert(0, this._aReorder);
    },
    
    _initDefaultButtons: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initDefaultButtons() {
        if (ss.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_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$_initButtons() {
        this._initDefaultButtons();
        if (!ss.isNullOrUndefined(this._data.buttons)) {
            if (this._data.buttons.length > 0) {
                this._divButtons = new js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$init() {
        this._initContainer();
        this._initImage();
        this._initCaption();
        this._initButtons();
    },
    
    initializeFunctionality: function js_com_cs_v4_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(ss.Delegate.create(this, this._updateShadowBoxTag));
        this._item.get_jQueryElement().ready(ss.Delegate.create(this, this.setupShadowbox));
        this._checkScriptErrors();
        this._initEditableCaption();
    },
    
    get_mediaGallery: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$get_mediaGallery() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallery"></value>
        if (this._section != null) {
            return this._section.get_functionality().get_mediaGallery();
        }
        else {
            return null;
        }
    },
    
    select: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$select() {
        this._item.addClass('cs-media-gallery-item-selected');
    },
    
    unSelect: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemFunctionality$unSelect() {
        this._item.removeClass('cs-media-gallery-item-selected');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItem(data) {
    /// <param name="data" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData">
    /// </param>
    /// <field name="_functionality$2" type="js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryItem.initializeBase(this);
    this._functionality$2 = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality(this, data);
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItem$get_functionality() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent(item, cropData) {
    /// <param name="item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
    /// </param>
    /// <param name="cropData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropData">
    /// </param>
    /// <field name="__onCropReady$2" type="Action">
    /// </field>
    /// <field name="_item$2" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
    /// </field>
    /// <field name="_cropData$2" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropData">
    /// </field>
    /// <field name="_divButtons$2" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_aCrop$2" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aSkip$2" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_aClose$2" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_img$2" type="js.com.cs.v4.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_cropAPI$2" type="js.com.JQueryScriptSharpV2._jCropAPI">
    /// </field>
    /// <field name="_openParams$2" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
    /// </field>
    /// <field name="_cropCoordinates$2" type="js.com.JQueryScriptSharpV2._JCropCoords">
    /// </field>
    js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent.initializeBase(this);
    this._item$2 = item;
    this._cropData$2 = cropData;
    this.addClass('cs-media-gallery-crop-item-content');
    this._init$2();
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent.prototype = {
    
    add_onCropReady: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$add_onCropReady(value) {
        /// <param name="value" type="Function" />
        this.__onCropReady$2 = ss.Delegate.combine(this.__onCropReady$2, value);
    },
    remove_onCropReady: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$remove_onCropReady(value) {
        /// <param name="value" type="Function" />
        this.__onCropReady$2 = ss.Delegate.remove(this.__onCropReady$2, value);
    },
    
    __onCropReady$2: null,
    _item$2: null,
    _cropData$2: null,
    
    get_cropData: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$get_cropData() {
        /// <value type="js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_initButtons$2() {
        var divButtons = new js.com.cs.v4.Controls.Common.MyDivElement();
        divButtons.addClass('cs-media-gallery-crop-buttons');
        this._divButtons$2 = divButtons;
        this._aCrop$2 = new js.com.cs.v4.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.v4.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.v4.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(ss.Delegate.create(this, this._btnSkip_onClick$2));
        this._aClose$2.add_onClick(ss.Delegate.create(this, this._btnClose_onClick$2));
        this._aCrop$2.add_onClick(ss.Delegate.create(this, this._btnCrop_onClick$2));
        this.appendChild(divButtons);
    },
    
    _btnSkip_onClick$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_btnSkip_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._cropReady$2();
    },
    
    _cropReady$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_cropReady$2() {
        Shadowbox.close();
        if (this.__onCropReady$2 != null) {
            this.__onCropReady$2();
        }
    },
    
    _destroyCrop$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_destroyCrop$2() {
        js.com.JQueryScriptSharpV2.jQueryUtil.select('.jcrop-holder').remove();
    },
    
    _btnCrop_onClick$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_btnCrop_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_submitCrop$2() {
        js.com.cs.v4.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, ss.Delegate.create(this, this.onCropResponse), 'json');
    },
    
    onCropResponse: function js_com_cs_v4_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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_btnClose_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        Shadowbox.close();
    },
    
    _getMaxImageWidth$2: function js_com_cs_v4_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_v4_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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_initImage$2(opts) {
        /// <param name="opts" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
        /// </param>
        var img = new js.com.cs.v4.Controls.Common.MyImageElement();
        this._img$2 = img;
        this._img$2.add_onLoad(ss.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_element());
    },
    
    _initCrop$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_initCrop$2() {
        var opts = {};
        opts.aspectRatio = this._cropData$2.aspectRatio;
        if (!ss.isNullOrUndefined(this._cropData$2.minWidth) && !ss.isNullOrUndefined(this._cropData$2.minHeight)) {
            opts.minSize = [ this._cropData$2.minWidth, this._cropData$2.minHeight ];
        }
        if (!ss.isNullOrUndefined(this._cropData$2.maxWidth) && !ss.isNullOrUndefined(this._cropData$2.maxHeight)) {
            opts.maxSize = [ this._cropData$2.maxWidth, this._cropData$2.maxHeight ];
        }
        opts.onSelect = ss.Delegate.create(this, this._onCropSelect$2);
        this._cropAPI$2 = js.com.JQueryScriptSharpV2.jQueryUtil.select('img', this.get_element()).Jcrop(opts);
    },
    
    _onCropSelect$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_onCropSelect$2(coords) {
        /// <param name="coords" type="js.com.JQueryScriptSharpV2._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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_img_onLoad$2(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        js.com.cs.v4.Util.jQueryShadowBoxUtil.hideShadowBoxLoading(500);
        this.get_style().display = '';
        this._img$2.remove_onLoad(ss.Delegate.create(this, this._img_onLoad$2));
        if (js.com.cs.v4.Util.GeneralUtil.isIE6()) {
            js.com.cs.v4.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.v4.Util.jQueryShadowBoxUtil.get_shadowBoxPlayerElement() != null) {
            var yCenter = Math.round((js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_showInShadowbox$2() {
        var width = (js.com.cs.v4.Util.WindowUtil.getViewportWidth(true) * 0.8);
        var height = (js.com.cs.v4.Util.WindowUtil.getViewportHeight(true) * 0.8);
        js.com.cs.v4.Util.jQueryShadowBoxUtil.openLink('<div></div>', this._cropData$2.title, null, null, width, height, ss.Delegate.create(this, this._onShownInShadowBox$2));
    },
    
    _showLoading$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_showLoading$2() {
        js.com.cs.v4.Util.jQueryShadowBoxUtil.showShadowBoxLoading('loading image', 500);
    },
    
    _onShownInShadowBox$2: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_onShownInShadowBox$2(options) {
        /// <param name="options" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
        /// </param>
        var divShadowBox = js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$_init$2() {
        this._showInShadowbox$2();
    },
    
    destroy: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropContent$destroy() {
        if (this._img$2 != null) {
            this._img$2.remove_onLoad(ss.Delegate.create(this, this._img_onLoad$2));
            this._img$2.destroy();
        }
        this._destroyCrop$2();
        js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropController(item, aCrop) {
    /// <param name="item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
    /// </param>
    /// <param name="aCrop" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </param>
    /// <field name="_item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
    /// </field>
    /// <field name="_aCrop" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_currCropContent" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent">
    /// </field>
    /// <field name="_cropIndex" type="Number" integer="true">
    /// </field>
    this._item = item;
    this._aCrop = aCrop;
    this._aCrop.add_onClick(ss.Delegate.create(this, this._aCrop_onClick));
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController.prototype = {
    _item: null,
    _aCrop: null,
    _currCropContent: null,
    _cropIndex: 0,
    
    _nextCrop: function js_com_cs_v4_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.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent(this._item, cropData);
            cropContent.add_onCropReady(ss.Delegate.create(this, this._cropContent_OnCropReady));
        }
    },
    
    _cropContent_OnCropReady: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropController$_cropContent_OnCropReady() {
        window.setTimeout(ss.Delegate.create(this, this._nextCrop), 500);
    },
    
    _jQueryShadowBoxUtil_OnClose: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropController$_jQueryShadowBoxUtil_OnClose(elemOptions) {
        /// <param name="elemOptions" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
        /// </param>
        alert('CLOSED');
    },
    
    _initCrop: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropController$_initCrop() {
        this._cropIndex = -1;
        this._nextCrop();
    },
    
    _aCrop_onClick: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemCropController$_aCrop_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._initCrop();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropData

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropData = function js_com_cs_v4_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.v4.UI.MediaGallery.v1.MediaGalleryItemCropData.prototype = {
    title: null,
    cropID: null,
    imageUrl: null,
    aspectRatio: 0,
    minWidth: 0,
    minHeight: 0,
    maxWidth: 0,
    maxHeight: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData = function js_com_cs_v4_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="MyElement">
    /// </field>
}
js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality(section, sectionData) {
    /// <param name="section" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </param>
    /// <param name="sectionData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </param>
    /// <field name="_lastSortedIDs" type="String">
    /// </field>
    /// <field name="_uploadIntervalAlert" type="js.com.cs.v4.Time.Interval">
    /// </field>
    /// <field name="_section" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </field>
    /// <field name="_sectionData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </field>
    /// <field name="_altContentUpload" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_mediaGallery" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallery">
    /// </field>
    /// <field name="_items" type="Array" elementType="MediaGalleryItem">
    /// </field>
    /// <field name="_divItems" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divUpload" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divUploadContainer" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_fileUpload" type="js.com.cs.v4.Controls.Form.MyFileUpload">
    /// </field>
    /// <field name="_divProblemsUploading" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_pMaxUpload" type="js.com.cs.v4.Controls.Common.MyParagraphElement">
    /// </field>
    /// <field name="_divNoItems" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    this._section = section;
    this._sectionData = sectionData;
    this._divItems = new js.com.cs.v4.Controls.Common.MyDivElement();
    this._divItems.addClass(js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS);
    this._section.appendChild(this._divItems);
    this._items = [];
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality.prototype = {
    _lastSortedIDs: null,
    
    get_lastSortedIDs: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_lastSortedIDs() {
        /// <value type="String"></value>
        return this._lastSortedIDs;
    },
    set_lastSortedIDs: function js_com_cs_v4_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_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_sectionData() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData"></value>
        return this._sectionData;
    },
    set_sectionData: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$set_sectionData(value) {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData"></value>
        this._sectionData = value;
        return value;
    },
    
    _mediaGallery: null,
    _items: null,
    
    get_items: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_items() {
        /// <value type="Array" elementType="MediaGalleryItem"></value>
        return this._items;
    },
    
    get_mediaGallery: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$get_mediaGallery() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallery"></value>
        return this._mediaGallery;
    },
    set_mediaGallery: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$set_mediaGallery(value) {
        /// <value type="js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$addItem(item, fadeInDuration) {
        /// <param name="item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
        /// </param>
        /// <param name="fadeInDuration" type="Number" integer="true">
        /// </param>
        if (!(Type.canCast(item, js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem))) {
            item = new js.com.cs.v4.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(ss.Delegate.create(this, this._itemOnDelete));
        this._updateNoItems();
        this._updateMaxUpload();
    },
    
    _itemOnDelete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_itemOnDelete(item) {
        /// <param name="item" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem">
        /// </param>
        js.com.cs.v4.Util.ArrayUtil.removeObjectFromArray(this._items, item);
        this._updateNoItems();
        this._updateMaxUpload();
    },
    
    _initInstructionsText: function js_com_cs_v4_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.v4.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_element());
        }
    },
    
    _updateNoItems: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_updateNoItems() {
        if (!this._items.length) {
            if (this._divNoItems == null) {
                this._divNoItems = new js.com.cs.v4.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_element());
        }
        else {
            if (this._divNoItems != null && this._divNoItems.get_element().parentNode != null) {
                this._divNoItems.remove();
            }
        }
    },
    
    _initContainer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initContainer() {
        this._section.addClass('cs-media-gallery-section');
    },
    
    _initProblemsUploadFlashPlayer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initProblemsUploadFlashPlayer() {
        this._divProblemsUploading = new js.com.cs.v4.Controls.Common.MyDivElement();
        this._divProblemsUploading.addClass('cs-media-gallery-section-upload-problems');
        var pProblems = new js.com.cs.v4.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.replaceAll('[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.JQueryScriptSharpV2.jQueryUtil.select('a', this._divUpload.get_element());
            var aProblem = new js.com.cs.v4.Controls.Common.MyAnchorElement(aProblems.get(aProblems.length - 1));
            aProblem.add_onClick(ss.Delegate.create(this, this._aProblem_onClick));
        }
        else {
            pProblems.set_innerHTML(this.get_mediaGallery().get_functionality().get_settings().uploadScriptProblemsUploadingWithoutAlternateUpload);
        }
    },
    
    _aProblem_onClick: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_aProblem_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._switchFlashUploaderWithAlternateUploadContent();
    },
    
    _switchFlashUploaderWithAlternateUploadContent: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_switchFlashUploaderWithAlternateUploadContent() {
        if (ss.isNullOrUndefined(this._altContentUpload)) {
            this._getAlternateUploadContentFromSettings(true);
        }
        this._divProblemsUploading.get_jQueryElement().after(this._altContentUpload.get_element());
        this._divProblemsUploading.remove(true);
    },
    
    _initUpload: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initUpload() {
        if (this._sectionData.canUpload) {
            var requiredFlashVersionUploadify = '9.0.24';
            var hasRequiredFlash = js.com.cs.v4.Util.SWFObjectUtil.hasFlashPlayerVersion(requiredFlashVersionUploadify);
            this._divUpload = new js.com.cs.v4.Controls.Common.MyDivElement();
            this._divUpload.addClass('cs-media-gallery-upload');
            this._section.appendChild(this._divUpload);
            if (hasRequiredFlash) {
                var divUploadContainer = new js.com.cs.v4.Controls.Common.MyDivElement();
                this._divUploadContainer = divUploadContainer;
                divUploadContainer.addClass('cs-media-gallery-upload-container');
                if (!!this._sectionData.maxAmtItems) {
                    this._pMaxUpload = new js.com.cs.v4.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.v4.Controls.Form.MyFileUpload();
                this._fileUpload.set_id('csMediaGalleryUploader' + this.get_sectionData().title.replaceAll(' ', ''));
                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 = ss.Delegate.create(this, this.onUploadComplete);
                uploadifySettings.onSelectOnce = ss.Delegate.create(this, this.onUploadOpenItem);
                js.com.cs.v4.Util.jQueryUploadifyUtil.initUploadify(uploadifySettings, this._fileUpload.get_id());
                this._initProblemsUploadFlashPlayer();
            }
            else {
                if (!String.isNullOrEmpty(this.get_sectionData().noFlashText)) {
                    var pNoFlash = new js.com.cs.v4.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 (ss.isNullOrUndefined(altUploadContent)) {
                        altUploadContent = new js.com.cs.v4.Controls.Common.MyElement(this._getAlternateUploadContentFromSettings(true));
                    }
                    this._divUpload.appendChild(altUploadContent);
                }
            }
        }
    },
    
    _updateMaxUpload: function js_com_cs_v4_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.replaceAll('[REMAINING]', amtRemaining.toString()).replaceAll('[TOTAL]', this._sectionData.maxAmtItems.toString());
            }
            else {
                text = this._sectionData.cantUploadMore.replaceAll('[TOTAL]', this._sectionData.maxAmtItems.toString());
            }
            this._pMaxUpload.set_innerHTML(text);
        }
    },
    
    onUploadComplete: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$onUploadComplete(e, queueID, fileObj, response, data) {
        /// <param name="e" type="ElementEvent">
        /// </param>
        /// <param name="queueID" type="String">
        /// </param>
        /// <param name="fileObj" type="js.com.JQueryScriptSharpV2._UploadifyFileObject">
        /// </param>
        /// <param name="response" type="String">
        /// </param>
        /// <param name="data" type="js.com.JQueryScriptSharpV2._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_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$onUploadOpenItem(e, data) {
        /// <param name="e" type="ElementEvent">
        /// </param>
        /// <param name="data" type="js.com.JQueryScriptSharpV2._UploadifySelectOnceData">
        /// </param>
        /// <returns type="Boolean"></returns>
        var newAmt = this._items.length + data.fileCount;
        if (newAmt > this._sectionData.maxAmtItems) {
            js.com.JQueryScriptSharpV2.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.replaceAll('[UPLOAD]', data.fileCount.toString()).replaceAll('[TOTAL]', this._sectionData.maxAmtItems.toString()).replaceAll('[LIMIT]', limit.toString());
            this._uploadIntervalAlert = new js.com.cs.v4.Time.Interval(150, 1, text);
            this._uploadIntervalAlert.add_onTick(ss.Delegate.create(this, this._uploadIntervalAlert_OnTick));
            this._uploadIntervalAlert.start();
        }
        return true;
    },
    
    _uploadIntervalAlert_OnTick: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_uploadIntervalAlert_OnTick(interval, repeatCount, data) {
        /// <param name="interval" type="js.com.cs.v4.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(ss.Delegate.create(this, this._uploadIntervalAlert_OnTick));
        this._uploadIntervalAlert.destroy();
        this._uploadIntervalAlert = null;
        return true;
    },
    
    _initSortable: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initSortable() {
        /// <summary>
        /// Initialize the sorting of images using the jQuery UI plugin
        /// </summary>
        js.com.JQueryScriptSharpV2.jQueryUtil.select('.' + js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS, this._section.get_element()).sortable('destroy');
        var options = {};
        options.handle = 'a.' + js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.csS_BTN_REORDER;
        options.stop = ss.Delegate.create(this, this._sortingStop);
        js.com.JQueryScriptSharpV2.jQueryUtil.select('.' + js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS, this._section.get_element()).sortable(options);
    },
    
    _sortingStop: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_sortingStop(e, ui) {
        /// <summary>
        /// Sorting stopped so submit requrest AJAX
        /// </summary>
        /// <param name="e" type="ElementEvent">
        /// </param>
        /// <param name="ui" type="js.com.JQueryScriptSharpV2._jQueryUISortableOptionsEventUI">
        /// </param>
        if (ui.item.length > 0) {
            var elem = ui.item[0];
            var item = this.getMediaGalleryItemFromElement(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 (ss.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, ss.Delegate.create(this, this._sortingResponse), 'json');
                section.get_functionality().set_lastSortedIDs(sortedIDs);
            }
        }
    },
    
    _sortingResponse: function js_com_cs_v4_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_v4_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.JQueryScriptSharpV2.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_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initAlternateUploadContent() {
        var elemAltUpload = this._getAlternateUploadContentFromSettings(false);
        if (elemAltUpload != null) {
            this._altContentUpload = new js.com.cs.v4.Controls.Common.MyElement(elemAltUpload);
            this._altContentUpload.remove();
        }
    },
    
    _initFunctionality: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$_initFunctionality() {
        this._initSortable();
        this._initAlternateUploadContent();
        js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._initUpload));
        this._updateNoItems();
        this._initInstructionsText();
    },
    
    init: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$init() {
        this._initContainer();
    },
    
    getMediaGalleryItemFromElement: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$getMediaGalleryItemFromElement(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem"></returns>
        for (var i = 0; i < this._items.length; i++) {
            if (this._items[i].get_element() === elem) {
                return this._items[i];
            }
        }
        return null;
    },
    
    getMediaGalleryItemFromID: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$getMediaGalleryItemFromID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryItemSectionFunctionality$getSortedIds() {
        /// <returns type="String"></returns>
        var sortedIDs = '';
        for (var i = 0; i < this._divItems.get_element().children.length; i++) {
            if (i > 0) {
                sortedIDs += ',';
            }
            var childElem = this._divItems.get_element().children[i];
            var childItem = this._section.get_functionality().getMediaGalleryItemFromElement(childElem);
            sortedIDs += childItem.get_functionality().get_data().id;
        }
        return sortedIDs;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSection(sectionData) {
    /// <param name="sectionData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </param>
    /// <field name="csS_CLASS_ITEMS" type="String" static="true">
    /// </field>
    /// <field name="_functionality$2" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality">
    /// </field>
    js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.initializeBase(this);
    this._functionality$2 = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality(this, sectionData);
    this._functionality$2.init();
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSection$get_functionality() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData = function js_com_cs_v4_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.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData.updateAlternateContentFromID = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryItemSectionData$updateAlternateContentFromID(sectionData) {
    /// <summary>
    /// Update and keep reference
    /// </summary>
    /// <param name="sectionData" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData">
    /// </param>
    if (!String.isNullOrEmpty(sectionData.alternateUploadContentID)) {
        var altContent = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(sectionData.alternateUploadContentID);
        if (altContent.length > 0) {
            sectionData.alternateUploadContent = altContent.get(0);
        }
    }
}
js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGallerySettings

js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings = function js_com_cs_v4_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.JQueryScriptSharpV2._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.v4.UI.MediaGallery.v1.MediaGallerySettings.updateAlternateContentFromIds = function js_com_cs_v4_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.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData.updateAlternateContentFromID(sections[i]);
    }
}
js.com.cs.v4.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.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality(tab) {
    /// <param name="tab" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab">
    /// </param>
    /// <field name="_tab" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab">
    /// </field>
    /// <field name="_section" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </field>
    this._tab = tab;
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality.prototype = {
    _tab: null,
    _section: null,
    
    get_section: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$get_section() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        return this._section;
    },
    set_section: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$set_section(value) {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection"></value>
        this._section = value;
        return value;
    },
    
    _initContainer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$_initContainer() {
        this._tab.addClass('cs-media-gallery-tab');
    },
    
    _initTab: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$_initTab() {
        this._tab.set_innerHTML(this._section.get_functionality().get_sectionData().title);
    },
    
    init: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$init() {
        this._initContainer();
        this._initTab();
    },
    
    select: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$select() {
        this._tab.addClass('selected');
        this._section.get_style().display = '';
    },
    
    unSelect: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabFunctionality$unSelect() {
        this._tab.removeClass('selected');
        this._section.get_style().display = 'none';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTab(section) {
    /// <param name="section" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection">
    /// </param>
    /// <field name="_functionality$2" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality">
    /// </field>
    js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab.initializeBase(this);
    this._functionality$2 = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality(this);
    this._functionality$2.set_section(section);
    this._functionality$2.init();
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTab$get_functionality() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality(tabs) {
    /// <param name="tabs" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs">
    /// </param>
    /// <field name="_selectedTab" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab">
    /// </field>
    /// <field name="_tabs" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs">
    /// </field>
    /// <field name="_tabItems" type="Array" elementType="MediaGalleryTab">
    /// </field>
    this._tabs = tabs;
    this._tabItems = [];
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality.prototype = {
    _selectedTab: null,
    _tabs: null,
    _tabItems: null,
    
    get_tabItems: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$get_tabItems() {
        /// <value type="Array" elementType="MediaGalleryTab"></value>
        return this._tabItems;
    },
    
    _initContainer: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$_initContainer() {
        this._tabs.addClass('cs-media-gallery-tabs');
    },
    
    addTab: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$addTab(section) {
        /// <param name="section" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab"></returns>
        var tab = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab(section);
        this._tabItems[this._tabItems.length] = tab;
        tab.add_onClick(ss.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_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$selectTab(tab) {
        /// <param name="tab" type="js.com.cs.v4.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_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$_tab_onClick(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        var tab = Type.safeCast(e.data, js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab);
        this.selectTab(tab);
    },
    
    selectInitialTab: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$selectInitialTab() {
        if (this._tabItems.length > 0) {
            this.selectTab(this._tabItems[0]);
        }
    },
    
    init: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabsFunctionality$init() {
        this._initContainer();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabs() {
    /// <field name="_functionality$2" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality">
    /// </field>
    js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs.initializeBase(this);
    this._functionality$2 = new js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality(this);
    this._functionality$2.init();
}
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs.prototype = {
    _functionality$2: null,
    
    get_functionality: function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryTabs$get_functionality() {
        /// <value type="js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality"></value>
        return this._functionality$2;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryUpload

js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryUpload = function js_com_cs_v4_UI_MediaGallery_v1_MediaGalleryUpload(settings) {
    /// <param name="settings" type="js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings">
    /// </param>
    js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryUpload.initializeBase(this);
}


Type.registerNamespace('js.com.cs.v4.UI.Mouse');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Mouse.HoverGroup

js.com.cs.v4.UI.Mouse.HoverGroup = function js_com_cs_v4_UI_Mouse_HoverGroup(isMouseOverGroupInitially) {
    /// <param name="isMouseOverGroupInitially" type="Boolean">
    /// </param>
    /// <field name="__onMouseEnter$1" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    /// <field name="__onMouseLeave$1" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </field>
    /// <field name="_mouseLeaveHandler$1" type="Number" integer="true">
    /// </field>
    /// <field name="_mouseLeaveEvent$1" type="js.com.JQueryScriptSharpV2.JQueryEvent">
    /// </field>
    /// <field name="_groupElements$1" type="Array" elementType="MyElement">
    /// </field>
    /// <field name="_isOverGroup$1" type="Boolean">
    /// </field>
    /// <field name="_mousE_LEAVE_INTERVAL_MS$1" type="Number" integer="true" static="true">
    /// </field>
    this._mouseLeaveHandler$1 = -1;
    this._groupElements$1 = [];
    js.com.cs.v4.UI.Mouse.HoverGroup.initializeBase(this);
    this._isOverGroup$1 = isMouseOverGroupInitially;
}
js.com.cs.v4.UI.Mouse.HoverGroup.prototype = {
    
    add_onMouseEnter: function js_com_cs_v4_UI_Mouse_HoverGroup$add_onMouseEnter(value) {
        /// <param name="value" type="Function" />
        this.__onMouseEnter$1 = ss.Delegate.combine(this.__onMouseEnter$1, value);
    },
    remove_onMouseEnter: function js_com_cs_v4_UI_Mouse_HoverGroup$remove_onMouseEnter(value) {
        /// <param name="value" type="Function" />
        this.__onMouseEnter$1 = ss.Delegate.remove(this.__onMouseEnter$1, value);
    },
    
    __onMouseEnter$1: null,
    
    add_onMouseLeave: function js_com_cs_v4_UI_Mouse_HoverGroup$add_onMouseLeave(value) {
        /// <param name="value" type="Function" />
        this.__onMouseLeave$1 = ss.Delegate.combine(this.__onMouseLeave$1, value);
    },
    remove_onMouseLeave: function js_com_cs_v4_UI_Mouse_HoverGroup$remove_onMouseLeave(value) {
        /// <param name="value" type="Function" />
        this.__onMouseLeave$1 = ss.Delegate.remove(this.__onMouseLeave$1, value);
    },
    
    __onMouseLeave$1: null,
    _mouseLeaveEvent$1: null,
    _isOverGroup$1: false,
    
    _attachElementHandlers$1: function js_com_cs_v4_UI_Mouse_HoverGroup$_attachElementHandlers$1(element) {
        /// <param name="element" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        element.add_onMouseEnter(ss.Delegate.create(this, this._element_onMouseEnter$1));
        element.add_onMouseLeave(ss.Delegate.create(this, this._element_onMouseLeave$1));
    },
    
    _triggerMouseLeave$1: function js_com_cs_v4_UI_Mouse_HoverGroup$_triggerMouseLeave$1() {
        if (this._isOverGroup$1) {
            this._isOverGroup$1 = false;
            if (this.__onMouseLeave$1 != null) {
                this.__onMouseLeave$1(this._mouseLeaveEvent$1);
            }
            this._destroyMouseLeaveHandler$1();
        }
    },
    
    _element_onMouseLeave$1: function js_com_cs_v4_UI_Mouse_HoverGroup$_element_onMouseLeave$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._isOverGroup$1) {
            this._destroyMouseLeaveHandler$1();
            this._mouseLeaveEvent$1 = e;
            this._mouseLeaveHandler$1 = window.setTimeout(ss.Delegate.create(this, this._triggerMouseLeave$1), js.com.cs.v4.UI.Mouse.HoverGroup._mousE_LEAVE_INTERVAL_MS$1);
        }
    },
    
    _destroyMouseLeaveHandler$1: function js_com_cs_v4_UI_Mouse_HoverGroup$_destroyMouseLeaveHandler$1() {
        if (this._mouseLeaveHandler$1 !== -1) {
            window.clearTimeout(this._mouseLeaveHandler$1);
            this._mouseLeaveEvent$1 = null;
            this._mouseLeaveHandler$1 = -1;
        }
    },
    
    _element_onMouseEnter$1: function js_com_cs_v4_UI_Mouse_HoverGroup$_element_onMouseEnter$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._destroyMouseLeaveHandler$1();
        if (!this._isOverGroup$1) {
            this._isOverGroup$1 = true;
            if (this.__onMouseEnter$1 != null) {
                this.__onMouseEnter$1(e);
            }
        }
    },
    
    addElement: function js_com_cs_v4_UI_Mouse_HoverGroup$addElement(element) {
        /// <param name="element" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        if (!js.com.cs.v4.Util.ArrayUtil.contains(this._groupElements$1, element)) {
            this._groupElements$1[this._groupElements$1.length] = element;
            this._attachElementHandlers$1(element);
        }
    },
    
    removeElement: function js_com_cs_v4_UI_Mouse_HoverGroup$removeElement(element) {
        /// <param name="element" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        element.remove_onMouseEnter(ss.Delegate.create(this, this._element_onMouseEnter$1));
        element.remove_onMouseLeave(ss.Delegate.create(this, this._element_onMouseLeave$1));
        js.com.cs.v4.Util.ArrayUtil.removeObjectFromArray(this._groupElements$1, element);
    },
    
    destroy: function js_com_cs_v4_UI_Mouse_HoverGroup$destroy() {
        while (this._groupElements$1.length > 0) {
            var elem = Type.safeCast((this._groupElements$1).pop(), js.com.cs.v4.Controls.Common.MyElement);
            this.removeElement(elem);
        }
        js.com.cs.v4.UI.Mouse.HoverGroup.callBaseMethod(this, 'destroy');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Mouse.MouseAttach

js.com.cs.v4.UI.Mouse.MouseAttach = function js_com_cs_v4_UI_Mouse_MouseAttach(element, position, xOffset, yOffset, strictAttachPosition, canGoOutOfViewport) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="position" type="js.com.cs.v4.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.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_attachPosition" type="js.com.cs.v4.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.v4.Util.MouseUtil.init();
    this._element = new js.com.cs.v4.Controls.Common.MyElement(element);
    this._xOffset = xOffset;
    this._yOffset = yOffset;
    this._strictAttachPosition = strictAttachPosition;
    this._canGoOutOfViewport = canGoOutOfViewport;
    this._attachPosition = position;
}
js.com.cs.v4.UI.Mouse.MouseAttach.prototype = {
    _element: null,
    _attachPosition: 0,
    _xOffset: 0,
    _yOffset: 0,
    _strictAttachPosition: false,
    _canGoOutOfViewport: false,
    _attached: false,
    
    _getBasePointForPosition: function js_com_cs_v4_UI_Mouse_MouseAttach$_getBasePointForPosition(pos) {
        /// <param name="pos" type="js.com.cs.v4.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.v4.Enums.POSITION.topRight) {
            pts[x] = 0 + this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() - this._yOffset;
        }
        else if (pos === js.com.cs.v4.Enums.POSITION.right) {
            pts[x] = 0 + this._xOffset;
            pts[y] = -this._element.get_jQueryElement().outerHeight() / 2 + this._yOffset;
        }
        else if (pos === js.com.cs.v4.Enums.POSITION.bottomRight) {
            pts[x] = 0 + this._xOffset;
            pts[y] = 0 + this._yOffset;
        }
        else if (pos === js.com.cs.v4.Enums.POSITION.bottom) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() / 2 + this._xOffset;
            pts[y] = 0 + this._xOffset;
        }
        else if (pos === js.com.cs.v4.Enums.POSITION.bottomLeft) {
            pts[x] = -this._element.get_jQueryElement().outerWidth() - this._xOffset;
            pts[y] = 0 + this._yOffset;
        }
        else if (pos === js.com.cs.v4.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.v4.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.v4.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.v4.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.v4.Util.MouseUtil.get_mouseX();
        pts[y] += js.com.cs.v4.Util.MouseUtil.get_mouseY();
        return pts;
    },
    
    _getBasePoint: function js_com_cs_v4_UI_Mouse_MouseAttach$_getBasePoint() {
        /// <returns type="Array" elementType="Number" elementInteger="true"></returns>
        return this._getBasePointForPosition(this._attachPosition);
    },
    
    _getValidPoint: function js_com_cs_v4_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.v4.Util.WindowUtil.getScrollLeft();
        var maxX = js.com.cs.v4.Util.WindowUtil.getViewportWidth(true) + minX;
        var minY = js.com.cs.v4.Util.WindowUtil.getScrollTop();
        var maxY = js.com.cs.v4.Util.WindowUtil.getViewportHeight(true) + minY;
        if (!this._canGoOutOfViewport) {
            if (x < minX) {
                if (this._strictAttachPosition) {
                    x = minX;
                }
                else {
                    x = this._getBasePointForPosition(js.com.cs.v4.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.v4.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.v4.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.v4.Enums.POSITION.top)[1];
                    if (y < minY) {
                        y = pt[1];
                    }
                }
            }
        }
        pt[0] = x;
        pt[1] = y;
        return pt;
    },
    
    _mouseMove: function js_com_cs_v4_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_v4_UI_Mouse_MouseAttach$attachWithMouseMove() {
        if (!this._attached) {
            this._attached = true;
            document.body.appendChild(this._element.get_element());
            js.com.cs.v4.Util.DOMUtil.get_document().add_onMouseMove(ss.Delegate.create(this, this._body_onMouseMove));
            this._element.get_style().position = 'absolute';
            this._mouseMove();
        }
    },
    
    _body_onMouseMove: function js_com_cs_v4_UI_Mouse_MouseAttach$_body_onMouseMove(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._mouseMove();
    },
    
    detachWithMouseMove: function js_com_cs_v4_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.v4.Util.DOMUtil.get_document().remove_onMouseMove(ss.Delegate.create(this, this._body_onMouseMove));
            this._attached = false;
        }
    }
}


Type.registerNamespace('js.com.cs.v4.UI.NavigationMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.NavigationStyle

js.com.cs.v4.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.v4.UI.NavigationMenu.NavigationStyle.prototype = {
    vertical: 1, 
    horizontal: 2
}
js.com.cs.v4.UI.NavigationMenu.NavigationStyle.registerEnum('js.com.cs.v4.UI.NavigationMenu.NavigationStyle', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.NavigationDirection

js.com.cs.v4.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.v4.UI.NavigationMenu.NavigationDirection.prototype = {
    left: 1, 
    right: 2
}
js.com.cs.v4.UI.NavigationMenu.NavigationDirection.registerEnum('js.com.cs.v4.UI.NavigationMenu.NavigationDirection', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.NavigationMenu

js.com.cs.v4.UI.NavigationMenu.NavigationMenu = function js_com_cs_v4_UI_NavigationMenu_NavigationMenu(navSettings) {
    /// <param name="navSettings" type="js.com.cs.v4.UI.NavigationMenu.NavigationMenuSettings">
    /// </param>
    /// <field name="_hoveR_CLASS" type="String" static="true">
    /// </field>
    /// <field name="top" type="Boolean">
    /// </field>
    /// <field name="_navigationMenuRoot" type="jQuery">
    /// </field>
    /// <field name="_navigationStyle" type="js.com.cs.v4.UI.NavigationMenu.NavigationStyle">
    /// </field>
    /// <field name="_navigationDirection" type="js.com.cs.v4.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>
    /// <field name="_fitIntoViewPortArea" type="Boolean">
    /// </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;
    this._fitIntoViewPortArea = navSettings.fitIntoViewPortArea;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.NavigationMenu.NavigationMenu._styleHorizontalTop = function js_com_cs_v4_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.v4.UI.NavigationMenu.NavigationMenu._styleHorizontal = function js_com_cs_v4_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.JQueryScriptSharpV2.jQueryUtil.select('ul', parentLI).eq(0);
        var centralComputation = (ulChild.width() - parentLI.width()) / 2;
        cssValues['left'] = -centralComputation;
    }
    else {
        cssValues['left'] = 0;
    }
}
js.com.cs.v4.UI.NavigationMenu.NavigationMenu._generateCssValues = function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_generateCssValues() {
    /// <returns type="Object"></returns>
    var cssValues = {};
    cssValues['position'] = 'absolute';
    cssValues['margin'] = 0;
    if (!js.com.cs.v4.UI.NavigationMenu.NavigationMenu.ulPadding) {
        cssValues['padding'] = 0;
    }
    else {
        cssValues['padding'] = js.com.cs.v4.UI.NavigationMenu.NavigationMenu.ulPadding;
    }
    cssValues['list-style'] = 'none';
    return cssValues;
}
js.com.cs.v4.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,
    _fitIntoViewPortArea: false,
    
    _init: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_init() {
        this._initRender();
        this._initAttach();
    },
    
    _initAttach: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_initAttach() {
        this._attachHover();
    },
    
    _attachHover: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_attachHover() {
        var listItems = js.com.JQueryScriptSharpV2.jQueryUtil.select('li', this._navigationMenuRoot);
        listItems.hover(ss.Delegate.create(this, this._hoverOnCallback), ss.Delegate.create(this, this._hoverOutCallback));
    },
    
    _hoverOnCallback: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_hoverOnCallback(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        try {
            Cufon.refresh();
        }
        catch ($e1) {
        }
        this._clearIntervalHide();
        if (this._lastOut != null) {
            var currOver = e.currentTarget;
            var ok = currOver === this._lastOut;
            var elem;
            if (!ok) {
                ok = js.com.cs.v4.Util.DOMUtil.isChildOf(currOver, this._lastOut);
            }
            if (!ok) {
                this._hidePopup();
            }
        }
        var item = (e.currentTarget);
        var firstUL = js.com.JQueryScriptSharpV2.jQueryUtil.select('ul:first', item);
        var parentLI = firstUL.closest('li').eq(0);
        var firstAnchor = js.com.JQueryScriptSharpV2.jQueryUtil.select('a:first-child', parentLI).eq(0);
        if (!firstAnchor.hasClass(js.com.cs.v4.UI.NavigationMenu.NavigationMenu._hoveR_CLASS)) {
            firstAnchor.addClass(js.com.cs.v4.UI.NavigationMenu.NavigationMenu._hoveR_CLASS);
        }
        parentLI.css('position', 'relative');
        var cssValues = js.com.cs.v4.UI.NavigationMenu.NavigationMenu._generateCssValues();
        this._filterNavigationStyle(parentLI, cssValues);
        firstUL.css(cssValues);
        if (!this._slideAnimation) {
            firstUL.css('display', 'block');
        }
        else {
            firstUL.slideDown(this._slideDuration);
        }
        if (this._fitIntoViewPortArea) {
            var viewPortHeight = js.com.cs.v4.Util.WindowUtil.getViewportHeight();
            var topScrollHeight = js.com.cs.v4.Util.WindowUtil.getScrollTop();
            var ulHeight = firstUL.height();
            var ulOffsetFromPage = firstUL.offset().top;
            if (!((ulOffsetFromPage + ulHeight) < (topScrollHeight + viewPortHeight))) {
                var totalLength = ulOffsetFromPage + ulHeight;
                var bottomPos = topScrollHeight + viewPortHeight;
                var missingHeightToOffset = totalLength - bottomPos;
                var maxNewOffset = ulOffsetFromPage - topScrollHeight;
                if (missingHeightToOffset < maxNewOffset) {
                    firstUL.css('top', '-' + (missingHeightToOffset + 5) + 'px');
                }
                else {
                    firstUL.css('top', '-' + (maxNewOffset - 5) + 'px');
                }
            }
        }
    },
    
    _filterNavigationStyle: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_filterNavigationStyle(parentLI, cssValues) {
        /// <param name="parentLI" type="jQuery">
        /// </param>
        /// <param name="cssValues" type="Object">
        /// </param>
        if (this._navigationStyle === js.com.cs.v4.UI.NavigationMenu.NavigationStyle.vertical) {
            this._vertical(parentLI, cssValues);
        }
        else if (this._navigationStyle === js.com.cs.v4.UI.NavigationMenu.NavigationStyle.horizontal) {
            this._horizontal(parentLI, cssValues);
        }
    },
    
    _vertical: function js_com_cs_v4_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_v4_UI_NavigationMenu_NavigationMenu$_horizontal(parentLI, cssValues) {
        /// <param name="parentLI" type="jQuery">
        /// </param>
        /// <param name="cssValues" type="Object">
        /// </param>
        if (!parentLI.parent().parent('li').length) {
            if (!this.top) {
                js.com.cs.v4.UI.NavigationMenu.NavigationMenu._styleHorizontal(parentLI, cssValues, this._setTop, this._horizontalCenterAlignMenu);
            }
            else if (this.top) {
                js.com.cs.v4.UI.NavigationMenu.NavigationMenu._styleHorizontalTop(parentLI, cssValues);
            }
        }
        else {
            this._styleVerticalLeftOrRight(parentLI, cssValues);
        }
    },
    
    _styleVerticalLeftOrRight: function js_com_cs_v4_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.v4.UI.NavigationMenu.NavigationDirection.right) {
            cssValues['left'] = parentLI.outerWidth(true);
        }
        else if (this._navigationDirection === js.com.cs.v4.UI.NavigationMenu.NavigationDirection.left) {
            cssValues['left'] = -parentLI.outerWidth(true);
        }
    },
    
    _clearIntervalHide: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_clearIntervalHide() {
        window.clearTimeout(this._intervalHide);
        this._intervalHide = -1;
    },
    
    _hoverOutCallback: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_hoverOutCallback(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._lastOut = e.currentTarget;
        this._clearIntervalHide();
        var item = (e.currentTarget);
        var firstUL = js.com.JQueryScriptSharpV2.jQueryUtil.select('ul:first', item);
        var parentLI = firstUL.closest('.level-0-item').eq(0);
        var menuAnchors = parentLI.find('a');
        for (var i = 0; i < menuAnchors.length; i++) {
            if (menuAnchors.eq(i).hasClass(js.com.cs.v4.UI.NavigationMenu.NavigationMenu._hoveR_CLASS)) {
                menuAnchors.eq(i).removeClass(js.com.cs.v4.UI.NavigationMenu.NavigationMenu._hoveR_CLASS);
                menuAnchors.eq(i).siblings('.level-2').eq(0).css('display', 'none');
            }
        }
        this._firstUL = firstUL;
        this._intervalHide = window.setTimeout(ss.Delegate.create(this, this._hidePopup), (this._setDelay) ? 350 : 0);
        Cufon.refresh();;
    },
    
    _hidePopup: function js_com_cs_v4_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_v4_UI_NavigationMenu_NavigationMenu$_initRender() {
        this._hideAllChildNodes();
        this._positionUnorderedLists();
    },
    
    _hideAllChildNodes: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_hideAllChildNodes() {
        js.com.JQueryScriptSharpV2.jQueryUtil.select('ul', this._navigationMenuRoot).css('display', 'none');
    },
    
    _positionUnorderedLists: function js_com_cs_v4_UI_NavigationMenu_NavigationMenu$_positionUnorderedLists() {
        js.com.JQueryScriptSharpV2.jQueryUtil.select('ul', this._navigationMenuRoot).css('position', 'relative');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.NavigationMenuSettings

js.com.cs.v4.UI.NavigationMenu.NavigationMenuSettings = function js_com_cs_v4_UI_NavigationMenu_NavigationMenuSettings() {
    /// <field name="element" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </field>
    /// <field name="navStyle" type="js.com.cs.v4.UI.NavigationMenu.NavigationStyle">
    /// </field>
    /// <field name="navDirection" type="js.com.cs.v4.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>
    /// <field name="fitIntoViewPortArea" type="Boolean">
    /// </field>
}
js.com.cs.v4.UI.NavigationMenu.NavigationMenuSettings.prototype = {
    element: null,
    navStyle: 0,
    navDirection: 0,
    horizontalCenterAlignMenu: false,
    setTop: true,
    setDelay: true,
    setSlideAnimation: false,
    slideDuration: 0,
    fitIntoViewPortArea: false
}


Type.registerNamespace('js.com.cs.v4.UI.NavigationMenu.SliderNavigation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton = function js_com_cs_v4_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.v4.UI.NavigationMenu.SliderNavigation.NavigationButton.initializeBase(this);
    this._ulChildren$2 = ulChildren;
    this._expanded$2 = selected;
    this._slideDuration$2 = SlideDuration;
    this.set_cssClass('toggler');
    this._init$2();
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton.prototype = {
    _slideDuration$2: 0,
    _ulChildren$2: null,
    _expanded$2: false,
    
    _initButton$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_NavigationButton$_initButton$2() {
        if (this._ulChildren$2.length > 0) {
            this.add_onClick(ss.Delegate.create(this, this._navigationButton_onClick$2));
            if (!this._expanded$2) {
                this._ulChildren$2.hide();
                this.set_cssClass(js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnExpand$2);
            }
            else {
                this._expand$2();
            }
        }
        else {
            this.set_cssClass(js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnDim$2);
        }
    },
    
    _navigationButton_onClick$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_NavigationButton$_navigationButton_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._toggle$2();
    },
    
    _toggle$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_NavigationButton$_toggle$2() {
        if (this._expanded$2) {
            this._collapse$2();
        }
        else {
            this._expand$2();
        }
    },
    
    _collapse$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_NavigationButton$_collapse$2() {
        var time = (js.com.cs.v4.Util.GeneralUtil.isIE6()) ? 0 : this._slideDuration$2;
        this._ulChildren$2.slideUp(time);
        this._expanded$2 = false;
        this.set_cssClass(js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnExpand$2);
    },
    
    _expand$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_NavigationButton$_expand$2() {
        var time = (js.com.cs.v4.Util.GeneralUtil.isIE6()) ? 0 : this._slideDuration$2;
        this._ulChildren$2.slideDown(time);
        this._expanded$2 = true;
        this.set_cssClass(js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnCollapse$2);
    },
    
    _init$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_NavigationButton$_init$2() {
        this._initButton$2();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigation

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigation = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_SliderNavigation(navDetails) {
    /// <param name="navDetails" type="js.com.cs.v4.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.v4.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails">
    /// </field>
    this._ulElement = navDetails.unorderedListElement;
    this._slideDuration = navDetails.slideDuration;
    this._navDetails = navDetails;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this.init));
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigation.prototype = {
    _slideDuration: 0,
    _ulElement: null,
    _itemContainer: null,
    _navDetails: null,
    
    init: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_SliderNavigation$init() {
        this._itemContainer = js.com.JQueryScriptSharpV2.jQueryUtil.select('li', this._ulElement);
        for (var count = 0; count < this._itemContainer.length; count++) {
            var ulChildren = js.com.JQueryScriptSharpV2.jQueryUtil.select('ul', this._itemContainer.eq(count));
            var btn = new js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton(ulChildren, false, this._navDetails.slideDuration);
            var imageContainer = new js.com.cs.v4.Controls.Common.MyDivElement();
            imageContainer.set_cssClass('nav-image-container');
            imageContainer.appendChild(btn.get_element());
            this._itemContainer.eq(count).prepend(imageContainer.get_jQueryElement());
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_SliderNavigationDetails() {
    /// <field name="unorderedListElement" type="jQuery">
    /// </field>
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails.prototype = {
    unorderedListElement: null,
    slideDuration: 0
}


Type.registerNamespace('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType

js.com.cs.v4.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.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType.prototype = {
    dim: 1, 
    expand: 2, 
    collapse: 3
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType.registerEnum('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationButtonType', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation(mainUL, navDetails) {
    /// <param name="mainUL" type="jQuery">
    /// </param>
    /// <param name="navDetails" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </param>
    /// <field name="_mainUL" type="jQuery">
    /// </field>
    /// <field name="_rootUL" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList">
    /// </field>
    /// <field name="_navDetails" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </field>
    this._navDetails = navDetails;
    this._mainUL = mainUL;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation.prototype = {
    _mainUL: null,
    _rootUL: null,
    
    get_rootUL: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation$get_rootUL() {
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        return this._rootUL;
    },
    
    _navDetails: null,
    
    _init: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigation$_init() {
        this._rootUL = new js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList(this._mainUL, this._navDetails);
    },
    
    selectItemFromListItem: function js_com_cs_v4_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.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton() {
    /// <field name="__clickEvent$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationDelegate">
    /// </field>
    js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton.initializeBase(this);
    this._setButtonClassAbsolute$2();
    this._attachClick$2();
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton.prototype = {
    
    add_clickEvent: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$add_clickEvent(value) {
        /// <param name="value" type="Function" />
        this.__clickEvent$2 = ss.Delegate.combine(this.__clickEvent$2, value);
    },
    remove_clickEvent: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$remove_clickEvent(value) {
        /// <param name="value" type="Function" />
        this.__clickEvent$2 = ss.Delegate.remove(this.__clickEvent$2, value);
    },
    
    __clickEvent$2: null,
    
    _setButtonClassAbsolute$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$_setButtonClassAbsolute$2() {
        this.get_jQueryElement().css('position', 'absolute');
    },
    
    _attachClick$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$_attachClick$2() {
        this.add_onClick(ss.Delegate.create(this, this._sliderNavigationButton_onClick$2));
    },
    
    _sliderNavigationButton_onClick$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$_sliderNavigationButton_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.onButtonClick();
    },
    
    onButtonClick: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationButton$onButtonClick() {
        if (this.__clickEvent$2 != null) {
            this.__clickEvent$2(this);
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationDetails() {
    /// <field name="slideDurationMS" type="Number" integer="true">
    /// </field>
    /// <field name="cssClassIconExpand" type="String">
    /// </field>
    /// <field name="cssClassIconCollapse" type="String">
    /// </field>
    /// <field name="cssClassLiSectionExpanded" type="String">
    /// </field>
    /// <field name="cssClassLiSectionCollapsed" type="String">
    /// </field>
    /// <field name="cssClassLinkExpanded" type="String">
    /// </field>
    /// <field name="cssClassLinkCollapsed" type="String">
    /// </field>
    /// <field name="clickOnNonLeafNodesOpenSection" type="Boolean">
    /// </field>
    /// <field name="initialSelectedClass" type="String">
    /// </field>
    /// <field name="autoOpenSelectedHierarchy" type="Boolean">
    /// </field>
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails.prototype = {
    slideDurationMS: 500,
    cssClassIconExpand: 'navigation-expand',
    cssClassIconCollapse: 'navigation-collapse',
    cssClassLiSectionExpanded: 'navigation-section-expanded',
    cssClassLiSectionCollapsed: 'navigation-section-collapsed',
    cssClassLinkExpanded: 'navigation-link-expanded',
    cssClassLinkCollapsed: 'navigation-link-collapsed',
    clickOnNonLeafNodesOpenSection: false,
    initialSelectedClass: 'selected',
    autoOpenSelectedHierarchy: true
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem(listItem, navDetails) {
    /// <param name="listItem" type="jQuery">
    /// </param>
    /// <param name="navDetails" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </param>
    /// <field name="__onSelectChildItem$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.OnSelectItemHandler">
    /// </field>
    /// <field name="_expanded$2" type="Boolean">
    /// </field>
    /// <field name="__expanded$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationDelegate">
    /// </field>
    /// <field name="__collapsed$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.NavigationDelegate">
    /// </field>
    /// <field name="_toggleButton$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton">
    /// </field>
    /// <field name="_parent$2" type="js.com.cs.v4.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.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList">
    /// </field>
    /// <field name="_aLink$2" type="js.com.cs.v4.Controls.Common.MyAnchorElement">
    /// </field>
    /// <field name="_navDetails$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </field>
    js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem.initializeBase(this, [ listItem ]);
    this._navDetails$2 = navDetails;
    this._li$2 = listItem;
    this._parseLinkElement$2();
    this._parseChildUL$2();
    this._setChildrenButton$2(listItem);
    this._attachListeners$2();
    this._updateCssClasses$2();
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem.prototype = {
    
    add_onSelectChildItem: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$add_onSelectChildItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectChildItem$2 = ss.Delegate.combine(this.__onSelectChildItem$2, value);
    },
    remove_onSelectChildItem: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$remove_onSelectChildItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectChildItem$2 = ss.Delegate.remove(this.__onSelectChildItem$2, value);
    },
    
    __onSelectChildItem$2: null,
    _expanded$2: false,
    
    add_expanded: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$add_expanded(value) {
        /// <param name="value" type="Function" />
        this.__expanded$2 = ss.Delegate.combine(this.__expanded$2, value);
    },
    remove_expanded: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$remove_expanded(value) {
        /// <param name="value" type="Function" />
        this.__expanded$2 = ss.Delegate.remove(this.__expanded$2, value);
    },
    
    __expanded$2: null,
    
    add_collapsed: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$add_collapsed(value) {
        /// <param name="value" type="Function" />
        this.__collapsed$2 = ss.Delegate.combine(this.__collapsed$2, value);
    },
    remove_collapsed: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$remove_collapsed(value) {
        /// <param name="value" type="Function" />
        this.__collapsed$2 = ss.Delegate.remove(this.__collapsed$2, value);
    },
    
    __collapsed$2: null,
    _toggleButton$2: null,
    _parent$2: null,
    _li$2: null,
    
    get_listItem: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$get_listItem() {
        /// <value type="jQuery"></value>
        return this._li$2;
    },
    set_listItem: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$set_listItem(value) {
        /// <value type="jQuery"></value>
        this._li$2 = value;
        return value;
    },
    
    get_ulParent: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$get_ulParent() {
        /// <summary>
        /// Used to store the parent UnorderedList
        /// </summary>
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        return this._parent$2;
    },
    set_ulParent: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$set_ulParent(value) {
        /// <summary>
        /// Used to store the parent UnorderedList
        /// </summary>
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        this._parent$2 = value;
        return value;
    },
    
    sliderNavigationChildren: null,
    _child$2: null,
    
    get_ulChild: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$get_ulChild() {
        /// <summary>
        /// Used to store the child Unordered List
        /// </summary>
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        return this._child$2;
    },
    set_ulChild: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$set_ulChild(value) {
        /// <summary>
        /// Used to store the child Unordered List
        /// </summary>
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList"></value>
        this._child$2 = value;
        return value;
    },
    
    _aLink$2: null,
    _navDetails$2: null,
    
    _parseLinkElement$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_parseLinkElement$2() {
        var aLink = js.com.JQueryScriptSharpV2.jQueryUtil.select('a', this.get_jQueryElement());
        if (aLink.length > 0) {
            this._aLink$2 = new js.com.cs.v4.Controls.Common.MyAnchorElement(aLink.eq(0));
        }
    },
    
    _parseChildUL$2: function js_com_cs_v4_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.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList(ul, this._navDetails$2);
            this._child$2.set_parentLI(this);
            this._child$2.add_onSelectItem(ss.Delegate.create(this, this._child_OnSelectItem$2));
        }
    },
    
    _child_OnSelectItem$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_child_OnSelectItem$2(Item) {
        /// <param name="Item" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
        /// </param>
        if (this.__onSelectChildItem$2 != null) {
            this.__onSelectChildItem$2(Item);
        }
    },
    
    _attachListeners$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_attachListeners$2() {
        this._toggleButton$2.add_clickEvent(ss.Delegate.create(this, this._sliderButtonReference_ClickEvent$2));
        if (this._navDetails$2.clickOnNonLeafNodesOpenSection && this._child$2 != null) {
            this._aLink$2.add_onClick(ss.Delegate.create(this, this._aLink_onClick$2));
            this._aLink$2.set_href('javascript:');
        }
    },
    
    _aLink_onClick$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_aLink_onClick$2(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._toggleOpen$2();
    },
    
    _toggleOpen$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_toggleOpen$2() {
        if (this._expanded$2) {
            this._initCollapse$2();
        }
        else {
            this._initExpand$2();
        }
    },
    
    _sliderButtonReference_ClickEvent$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_sliderButtonReference_ClickEvent$2(sender) {
        /// <param name="sender" type="Object">
        /// </param>
        this._toggleOpen$2();
    },
    
    _initExpand$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_initExpand$2() {
        this._doExpandChildren$2();
    },
    
    _initCollapse$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_initCollapse$2() {
        this._doCollapseChildren$2();
    },
    
    _setChildrenButton$2: function js_com_cs_v4_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.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton();
            this._toggleButton$2 = sliderButton;
            this._toggleButton$2.set_cssClass('navigation-expand');
            this.get_jQueryElement().append(this._toggleButton$2.get_element());
            this.get_jQueryElement().css('position', 'relative');
            if (this._aLink$2.get_jQueryElement().hasClass(this._navDetails$2.initialSelectedClass)) {
                this._expanded$2 = true;
            }
            else {
                this.get_ulChild().get_jQueryElement().hide();
                this._expanded$2 = false;
            }
        }
        else {
            var sliderButton = new js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton();
            this._toggleButton$2 = sliderButton;
            this._toggleButton$2.set_cssClass('navigation-dim');
            this.get_jQueryElement().prepend(this._toggleButton$2.get_element());
            this.get_jQueryElement().css('position', 'relative');
        }
    },
    
    expandChildren: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$expandChildren() {
        this._initExpand$2();
    },
    
    collapseChildren: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$collapseChildren() {
        this._initCollapse$2();
    },
    
    _updateCssClasses$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_updateCssClasses$2() {
        this.toggle2CssClasses(this._navDetails$2.cssClassLiSectionExpanded, this._navDetails$2.cssClassLiSectionCollapsed, this._expanded$2);
        this._aLink$2.toggle2CssClasses(this._navDetails$2.cssClassLinkExpanded, this._navDetails$2.cssClassLinkCollapsed, this._expanded$2);
        if (this.get_ulChild() != null) {
            this._toggleButton$2.toggle2CssClasses(this._navDetails$2.cssClassIconExpand, this._navDetails$2.cssClassIconCollapse, !this._expanded$2);
        }
    },
    
    _doExpandChildren$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_doExpandChildren$2() {
        if (this.get_ulChild() != null) {
            this.get_ulChild().get_jQueryElement().slideDown(this._navDetails$2.slideDurationMS);
            this.onClickExpand();
        }
        this._expanded$2 = true;
        this._updateCssClasses$2();
    },
    
    _doCollapseChildren$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$_doCollapseChildren$2() {
        if (this.get_ulChild() != null) {
            this.get_ulChild().get_jQueryElement().slideUp(this._navDetails$2.slideDurationMS);
            this.onClickCollapse();
        }
        this._expanded$2 = false;
        this._updateCssClasses$2();
    },
    
    onClickExpand: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$onClickExpand() {
        if (this.__expanded$2 != null) {
            this.__expanded$2(this);
        }
    },
    
    onClickCollapse: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationListItem$onClickCollapse() {
        if (this.__collapsed$2 != null) {
            this.__collapsed$2(this);
        }
    },
    
    selectChildItemFromListItem: function js_com_cs_v4_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_v4_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.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList

js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList = function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList(unorderedList, navDetails) {
    /// <param name="unorderedList" type="jQuery">
    /// </param>
    /// <param name="navDetails" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </param>
    /// <field name="__onSelectItem$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.OnSelectItemHandler">
    /// </field>
    /// <field name="_ul$2" type="jQuery">
    /// </field>
    /// <field name="_parentLI$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
    /// </field>
    /// <field name="_childrenLI$2" type="Array" elementType="SliderNavigationListItem">
    /// </field>
    /// <field name="_navDetails$2" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails">
    /// </field>
    js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList.initializeBase(this, [ unorderedList ]);
    this._navDetails$2 = navDetails;
    this._ul$2 = unorderedList;
    this._childrenLI$2 = [];
    this._parseChildren$2();
    if (this._navDetails$2.autoOpenSelectedHierarchy) {
        this.selectItemFromListItem(null, true);
    }
}
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList.prototype = {
    
    add_onSelectItem: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$add_onSelectItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectItem$2 = ss.Delegate.combine(this.__onSelectItem$2, value);
    },
    remove_onSelectItem: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$remove_onSelectItem(value) {
        /// <param name="value" type="Function" />
        this.__onSelectItem$2 = ss.Delegate.remove(this.__onSelectItem$2, value);
    },
    
    __onSelectItem$2: null,
    _ul$2: null,
    _parentLI$2: null,
    
    get_parentLI: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$get_parentLI() {
        /// <summary>
        /// Used to store the parent List item
        /// </summary>
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem"></value>
        return this._parentLI$2;
    },
    set_parentLI: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$set_parentLI(value) {
        /// <summary>
        /// Used to store the parent List item
        /// </summary>
        /// <value type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem"></value>
        this._parentLI$2 = value;
        return value;
    },
    
    get_childrenLI: function js_com_cs_v4_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_v4_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_v4_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.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem(childLi, this._navDetails$2);
                this.get_childrenLI()[this.get_childrenLI().length] = li;
                li.set_ulParent(this);
                li.add_onSelectChildItem(ss.Delegate.create(this, this._li_OnSelectChildItem$2));
            }
        }
    },
    
    _li_OnSelectChildItem$2: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$_li_OnSelectChildItem$2(Item) {
        /// <param name="Item" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
        /// </param>
        if (this.__onSelectItem$2 != null) {
            this.__onSelectItem$2(Item);
        }
    },
    
    addChild: function js_com_cs_v4_UI_NavigationMenu_SliderNavigation_v2_SliderNavigationUnorderedList$addChild(child) {
        /// <summary>
        /// Add a child to the unordered list
        /// </summary>
        /// <param name="child" type="js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem">
        /// Child reference
        /// </param>
        this.get_childrenLI()[this.get_childrenLI().length] = child;
    },
    
    selectItemFromListItem: function js_com_cs_v4_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>
        if (this._navDetails$2.autoOpenSelectedHierarchy) {
            var selectedJElem = js.com.JQueryScriptSharpV2.jQueryUtil.select('.' + this._navDetails$2.initialSelectedClass);
            if (selectedJElem.size() > 0) {
                listItem = new js.com.cs.v4.Controls.Common.MyListItemElem(selectedJElem.closest('li')).get_element();
            }
        }
        if (listItem != null) {
            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(item);
                    }
                }
                else {
                    found = item.selectChildItemFromListItem(listItem, expandParents);
                }
                if (found) {
                    return found;
                }
            }
            return false;
        }
        return false;
    }
}


Type.registerNamespace('js.com.cs.v4.UI.PopUpMenu.Helpers');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass

js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass = function js_com_cs_v4_UI_PopUpMenu_Helpers_GetDivReturnClass() {
    /// <field name="divSubMenu" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="divTitle" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
}
js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass.prototype = {
    divSubMenu: null,
    divTitle: null
}


Type.registerNamespace('js.com.cs.v4.UI.PopUpMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.PopUpMenu.MenuItem

js.com.cs.v4.UI.PopUpMenu.MenuItem = function js_com_cs_v4_UI_PopUpMenu_MenuItem(divItem, menuLevel, popUpMenu) {
    /// <param name="divItem" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </param>
    /// <param name="menuLevel" type="js.com.cs.v4.UI.PopUpMenu.MenuLevel">
    /// </param>
    /// <param name="popUpMenu" type="js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass">
    /// </param>
    /// <field name="_div" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="menuLevel" type="js.com.cs.v4.UI.PopUpMenu.MenuLevel">
    /// </field>
    /// <field name="_popUpMenu" type="js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass">
    /// </field>
    /// <field name="subMenu" type="js.com.cs.v4.UI.PopUpMenu.MenuLevel">
    /// </field>
    this._div = divItem;
    this.menuLevel = menuLevel;
    this._popUpMenu = popUpMenu;
    this.subMenu = null;
    this._init();
}
js.com.cs.v4.UI.PopUpMenu.MenuItem.prototype = {
    _div: null,
    menuLevel: null,
    _popUpMenu: null,
    subMenu: null,
    
    _initSubMenu: function js_com_cs_v4_UI_PopUpMenu_MenuItem$_initSubMenu() {
        this._div.get_style().position = 'relative';
        this.positionSubMenu();
    },
    
    positionSubMenu: function js_com_cs_v4_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_v4_UI_PopUpMenu_MenuItem$_initHandlers() {
        this._div.add_onMouseOver(ss.Delegate.create(this, function(e) {
            this._popUpMenu.mouseOverDiv(this);
        }));
        this._div.add_onMouseOut(ss.Delegate.create(this, function(e) {
            this._popUpMenu.mouseOutDiv(this);
        }));
    },
    
    _init: function js_com_cs_v4_UI_PopUpMenu_MenuItem$_init() {
        var objDivs = js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass.getDivs(this._div);
        if (objDivs == null) {
        }
        else {
            this._div = objDivs.divTitle;
            this.subMenu = new js.com.cs.v4.UI.PopUpMenu.MenuLevel(objDivs.divSubMenu, this.menuLevel, this, this._popUpMenu);
            this._initSubMenu();
        }
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.PopUpMenu.MenuLevel

js.com.cs.v4.UI.PopUpMenu.MenuLevel = function js_com_cs_v4_UI_PopUpMenu_MenuLevel(divLevel, parentLevel, openOnMenuItem, popUpMenu) {
    /// <param name="divLevel" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </param>
    /// <param name="parentLevel" type="js.com.cs.v4.UI.PopUpMenu.MenuLevel">
    /// </param>
    /// <param name="openOnMenuItem" type="js.com.cs.v4.UI.PopUpMenu.MenuItem">
    /// </param>
    /// <param name="popUpMenu" type="js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass">
    /// </param>
    /// <field name="_openOnMenuItem" type="js.com.cs.v4.UI.PopUpMenu.MenuItem">
    /// </field>
    /// <field name="_parentLevel" type="js.com.cs.v4.UI.PopUpMenu.MenuLevel">
    /// </field>
    /// <field name="_popUpMenu" type="js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass">
    /// </field>
    /// <field name="menuItems" type="Array" elementType="MenuItem">
    /// </field>
    /// <field name="div" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_divs" type="Array" elementType="MyDivElement">
    /// </field>
    /// <field name="currOpenedLevel" type="js.com.cs.v4.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.v4.UI.PopUpMenu.MenuLevel.prototype = {
    _openOnMenuItem: null,
    _parentLevel: null,
    _popUpMenu: null,
    menuItems: null,
    div: null,
    _divs: null,
    currOpenedLevel: null,
    
    _makeSubMenusAbsolute: function js_com_cs_v4_UI_PopUpMenu_MenuLevel$_makeSubMenusAbsolute() {
        for (var i = 0; i < this.div.get_element().childNodes.length; i++) {
            var node = this.div.get_element().childNodes[i];
            if (!ss.isNullOrUndefined(node.tagName) && node.tagName.toLowerCase() === 'div') {
                var divItem = new js.com.cs.v4.Controls.Common.MyDivElement(node);
                this._divs[this._divs.length] = divItem;
                var objInnerDivs = js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass.getDivs(divItem);
                if (objInnerDivs != null) {
                    divItem.get_style().position = 'relative';
                    objInnerDivs.divSubMenu.get_style().position = 'absolute';
                }
            }
        }
    },
    
    _parseChildDivs: function js_com_cs_v4_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.v4.UI.PopUpMenu.MenuItem(div, this, this._popUpMenu);
        }
    },
    
    hideSubMenu: function js_com_cs_v4_UI_PopUpMenu_MenuLevel$hideSubMenu() {
        if (this.currOpenedLevel != null) {
            this.currOpenedLevel.hide();
            this.currOpenedLevel = null;
        }
    },
    
    show: function js_com_cs_v4_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_v4_UI_PopUpMenu_MenuLevel$hide() {
        this.hideSubMenu();
        this.div.get_style().display = 'none';
        this._popUpMenu.callOnMenuClose(this.div);
    },
    
    _init: function js_com_cs_v4_UI_PopUpMenu_MenuLevel$_init() {
        this._makeSubMenusAbsolute();
        this._parseChildDivs();
        this.hide();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass

js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass = function js_com_cs_v4_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.v4.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.v4.UI.PopUpMenu.PopUpMenuClass_MenuOpenClose_Delegate">
    /// </field>
    /// <field name="__onMenuClose" type="js.com.cs.v4.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.v4.UI.PopUpMenu.MenuLevel">
    /// </field>
    if (ss.isNullOrUndefined(openDelay)) {
        openDelay = 100;
    }
    if (ss.isNullOrUndefined(closeTimeout)) {
        closeTimeout = 50;
    }
    this._div = new js.com.cs.v4.Controls.Common.MyDivElement(divID);
    this._openDelay = openDelay;
    this._closeTimeout = closeTimeout;
    this.openLeft = openLeft;
    this._init();
}
js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass.getDivs = function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$getDivs(div) {
    /// <param name="div" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </param>
    /// <returns type="js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass"></returns>
    var obj = new js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass();
    for (var i = 0; i < div.get_element().childNodes.length; i++) {
        var node = div.get_element().childNodes[i];
        if (!ss.isNullOrUndefined(node.tagName) && node.tagName.toLowerCase() === 'div') {
            if (obj.divTitle == null) {
                obj.divTitle = new js.com.cs.v4.Controls.Common.MyDivElement(node);
            }
            else {
                obj.divSubMenu = new js.com.cs.v4.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.v4.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.v4.UI.PopUpMenu.PopUpMenuClass.prototype = {
    _div: null,
    _openDelay: 100,
    openLeft: true,
    _closeTimeout: 50,
    _openDelayTimeoutID: 0,
    
    add_onMenuOpen: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$add_onMenuOpen(value) {
        /// <param name="value" type="Function" />
        this.__onMenuOpen = ss.Delegate.combine(this.__onMenuOpen, value);
    },
    remove_onMenuOpen: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$remove_onMenuOpen(value) {
        /// <param name="value" type="Function" />
        this.__onMenuOpen = ss.Delegate.remove(this.__onMenuOpen, value);
    },
    
    __onMenuOpen: null,
    
    add_onMenuClose: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$add_onMenuClose(value) {
        /// <param name="value" type="Function" />
        this.__onMenuClose = ss.Delegate.combine(this.__onMenuClose, value);
    },
    remove_onMenuClose: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$remove_onMenuClose(value) {
        /// <param name="value" type="Function" />
        this.__onMenuClose = ss.Delegate.remove(this.__onMenuClose, value);
    },
    
    __onMenuClose: null,
    
    callOnMenuOpen: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$callOnMenuOpen(div) {
        /// <param name="div" type="js.com.cs.v4.Controls.Common.MyDivElement">
        /// </param>
        if (this.__onMenuOpen != null) {
            this.__onMenuOpen(div);
        }
    },
    
    callOnMenuClose: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$callOnMenuClose(div) {
        /// <param name="div" type="js.com.cs.v4.Controls.Common.MyDivElement">
        /// </param>
        if (this.__onMenuClose != null) {
            this.__onMenuClose(div);
        }
    },
    
    _callOutTimeoutID: 0,
    _callOut: false,
    _rootMenuLevel: null,
    
    mouseOverDiv: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$mouseOverDiv(menuItem) {
        /// <param name="menuItem" type="js.com.cs.v4.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(ss.Delegate.create(this, function() {
                this._openDelayTimeoutID = 0;
                menuItem.subMenu.show();
            }), this._openDelay);
        }
    },
    
    mouseOutDiv: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$mouseOutDiv(menuItem) {
        /// <param name="menuItem" type="Object">
        /// </param>
        window.clearTimeout(this._callOutTimeoutID);
        this._callOutTimeoutID = window.setTimeout(ss.Delegate.create(this, this._triggerOut), this._closeTimeout);
        if (this._openDelayTimeoutID > 0) {
            window.clearTimeout(this._openDelayTimeoutID);
        }
    },
    
    _triggerOut: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$_triggerOut() {
        this._rootMenuLevel.hideSubMenu();
    },
    
    _init: function js_com_cs_v4_UI_PopUpMenu_PopUpMenuClass$_init() {
        var prevDisplay = this._div.get_style().display;
        this._rootMenuLevel = new js.com.cs.v4.UI.PopUpMenu.MenuLevel(this._div, null, null, this);
        this._div.get_style().display = prevDisplay;
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Position');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Position.ControlPositionerParams

js.com.cs.v4.UI.Position.ControlPositionerParams = function js_com_cs_v4_UI_Position_ControlPositionerParams() {
    /// <field name="controlToPositionID" type="String">
    /// </field>
    /// <field name="controlToPosition" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="relativeToControlID" type="String">
    /// </field>
    /// <field name="relativeToControl" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="alignPosition" type="js.com.cs.v4.Enums.POSITION">
    /// </field>
    /// <field name="initialPositionAutomatically" type="Boolean">
    /// Whether to position the item immediately within the constructor
    /// </field>
    /// <field name="initialAttachToWindowResize" type="Boolean">
    /// Whether to attach with window resize to update value initially
    /// </field>
    this.alignPosition = js.com.cs.v4.Enums.POSITION.right;
}
js.com.cs.v4.UI.Position.ControlPositionerParams.prototype = {
    controlToPositionID: null,
    controlToPosition: null,
    relativeToControlID: null,
    relativeToControl: null,
    initialPositionAutomatically: false,
    initialAttachToWindowResize: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Position.ControlPositioner

js.com.cs.v4.UI.Position.ControlPositioner = function js_com_cs_v4_UI_Position_ControlPositioner(parameters) {
    /// <summary>
    /// Class to position a control relative to another control
    /// </summary>
    /// <param name="parameters" type="js.com.cs.v4.UI.Position.ControlPositionerParams">
    /// </param>
    /// <field name="_params$1" type="js.com.cs.v4.UI.Position.ControlPositionerParams">
    /// </field>
    js.com.cs.v4.UI.Position.ControlPositioner.initializeBase(this);
    this._params$1 = parameters;
    if (this._params$1.controlToPosition == null) {
        this._params$1.controlToPosition = js.com.cs.v4.Util.GeneralUtil.getElementAsMyElement(this._params$1.controlToPositionID);
    }
    if (this._params$1.relativeToControl == null) {
        this._params$1.relativeToControl = js.com.cs.v4.Util.GeneralUtil.getElementAsMyElement(this._params$1.relativeToControlID);
    }
    if (this._params$1.initialPositionAutomatically) {
        this.position(this._params$1.initialAttachToWindowResize);
    }
}
js.com.cs.v4.UI.Position.ControlPositioner.prototype = {
    _params$1: null,
    
    _getTopLeftPosition$1: function js_com_cs_v4_UI_Position_ControlPositioner$_getTopLeftPosition$1() {
        /// <returns type="js.com.JQueryScriptSharpV2._Position"></returns>
        var pos = this._params$1.relativeToControl.get_jQueryElement().offset();
        return pos;
    },
    
    _removeHandlers$1: function js_com_cs_v4_UI_Position_ControlPositioner$_removeHandlers$1() {
        js.com.cs.v4.Util.WindowUtil.remove_onResize(ss.Delegate.create(this, this._windowUtil_OnResize$1));
    },
    
    _initHandlers$1: function js_com_cs_v4_UI_Position_ControlPositioner$_initHandlers$1() {
        js.com.cs.v4.Util.WindowUtil.add_onResize(ss.Delegate.create(this, this._windowUtil_OnResize$1));
    },
    
    _windowUtil_OnResize$1: function js_com_cs_v4_UI_Position_ControlPositioner$_windowUtil_OnResize$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.position(false);
    },
    
    _offsetAlignPositionX$1: function js_com_cs_v4_UI_Position_ControlPositioner$_offsetAlignPositionX$1(pos) {
        /// <param name="pos" type="js.com.JQueryScriptSharpV2._Position">
        /// </param>
        var relCtrlWidth = this._params$1.relativeToControl.get_jQueryElement().outerWidth();
        var controlWidth = this._params$1.controlToPosition.get_jQueryElement().outerWidth();
        var offset = 0;
        switch (this._params$1.alignPosition) {
            case js.com.cs.v4.Enums.POSITION.topRight:
            case js.com.cs.v4.Enums.POSITION.right:
            case js.com.cs.v4.Enums.POSITION.bottomRight:
                offset = relCtrlWidth;
                break;
            case js.com.cs.v4.Enums.POSITION.top:
            case js.com.cs.v4.Enums.POSITION.bottom:
                offset = -controlWidth / 2 + relCtrlWidth / 2;
                break;
            case js.com.cs.v4.Enums.POSITION.left:
            case js.com.cs.v4.Enums.POSITION.bottomLeft:
            case js.com.cs.v4.Enums.POSITION.topLeft:
                offset = -controlWidth;
                break;
        }
        pos.left += offset;
    },
    
    _offsetAlignPositionY$1: function js_com_cs_v4_UI_Position_ControlPositioner$_offsetAlignPositionY$1(pos) {
        /// <param name="pos" type="js.com.JQueryScriptSharpV2._Position">
        /// </param>
        var relCtrlHeight = this._params$1.relativeToControl.get_jQueryElement().outerHeight();
        var controlHeight = this._params$1.controlToPosition.get_jQueryElement().outerHeight();
        var offset = 0;
        switch (this._params$1.alignPosition) {
            case js.com.cs.v4.Enums.POSITION.topLeft:
            case js.com.cs.v4.Enums.POSITION.top:
            case js.com.cs.v4.Enums.POSITION.topRight:
                offset = -controlHeight;
                break;
            case js.com.cs.v4.Enums.POSITION.left:
            case js.com.cs.v4.Enums.POSITION.right:
                offset = -controlHeight / 2 + relCtrlHeight / 2;
                break;
            case js.com.cs.v4.Enums.POSITION.bottomLeft:
            case js.com.cs.v4.Enums.POSITION.bottom:
            case js.com.cs.v4.Enums.POSITION.bottomRight:
                offset = relCtrlHeight;
                break;
        }
        pos.top += offset;
    },
    
    position: function js_com_cs_v4_UI_Position_ControlPositioner$position(attachToResize) {
        /// <param name="attachToResize" type="Boolean">
        /// </param>
        this._params$1.controlToPosition.get_style().position = 'absolute';
        window.document.body.appendChild(this._params$1.controlToPosition.get_element());
        var pos = this._getTopLeftPosition$1();
        this._offsetAlignPositionX$1(pos);
        this._offsetAlignPositionY$1(pos);
        this._params$1.controlToPosition.get_jQueryElement().css('left', pos.left);
        this._params$1.controlToPosition.get_jQueryElement().css('top', pos.top);
        if (attachToResize) {
            this._removeHandlers$1();
            this._initHandlers$1();
        }
    },
    
    stopAttachToWindowResize: function js_com_cs_v4_UI_Position_ControlPositioner$stopAttachToWindowResize() {
        this._removeHandlers$1();
    },
    
    destroyAndRemoveElements: function js_com_cs_v4_UI_Position_ControlPositioner$destroyAndRemoveElements() {
        this.destroy();
        if (this._params$1.controlToPosition != null) {
            this._params$1.controlToPosition.destroy();
            this._params$1.controlToPosition = null;
        }
        if (this._params$1.relativeToControl != null) {
            this._params$1.relativeToControl.destroy();
            this._params$1.relativeToControl = null;
        }
    },
    
    destroy: function js_com_cs_v4_UI_Position_ControlPositioner$destroy() {
        this._removeHandlers$1();
        js.com.cs.v4.UI.Position.ControlPositioner.callBaseMethod(this, 'destroy');
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Scroller');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Scroller.AnimDirection

js.com.cs.v4.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.v4.UI.Scroller.AnimDirection.prototype = {
    leftToRight: 1, 
    rightToLeft: 2
}
js.com.cs.v4.UI.Scroller.AnimDirection.registerEnum('js.com.cs.v4.UI.Scroller.AnimDirection', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Scroller.AnimScrollType

js.com.cs.v4.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.v4.UI.Scroller.AnimScrollType.prototype = {
    animateX: 1, 
    animateY: 2
}
js.com.cs.v4.UI.Scroller.AnimScrollType.registerEnum('js.com.cs.v4.UI.Scroller.AnimScrollType', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS

js.com.cs.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS = function js_com_cs_v4_UI_Scroller_FIX_VERTICAL_POSITION_PARAMETERS() {
    /// <field name="bottomScrollContainer" type="js.com.cs.v4.Controls.Common.MyElement">
    /// 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.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS.prototype = {
    bottomScrollContainer: null,
    bottomScrollOffset: 0,
    topScrollOffset: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Scroller.FixVerticalPosition

js.com.cs.v4.UI.Scroller.FixVerticalPosition = function js_com_cs_v4_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.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS">
    /// </param>
    /// <field name="_elem" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_params" type="js.com.cs.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS">
    /// </field>
    /// <field name="_divTest" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    this._elem = new js.com.cs.v4.Controls.Common.MyElement(domElem);
    this._params = parameters;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(ss.Delegate.create(this, this._init));
}
js.com.cs.v4.UI.Scroller.FixVerticalPosition.prototype = {
    _elem: null,
    _params: null,
    _divTest: null,
    
    _initHandlers: function js_com_cs_v4_UI_Scroller_FixVerticalPosition$_initHandlers() {
        js.com.cs.v4.Util.WindowUtil.add_onScroll(ss.Delegate.create(this, this._windowUtil_OnScroll));
    },
    
    _setRelativePosition: function js_com_cs_v4_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_v4_UI_Scroller_FixVerticalPosition$updatePosition() {
        /// <summary>
        /// Update the position based on the current scroll
        /// </summary>
        var scrollTop = js.com.cs.v4.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.v4.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_v4_UI_Scroller_FixVerticalPosition$_windowUtil_OnScroll(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this.updatePosition();
    },
    
    _init: function js_com_cs_v4_UI_Scroller_FixVerticalPosition$_init() {
        this._setRelativePosition();
        this._initHandlers();
        window.setTimeout(ss.Delegate.create(this, this.updatePosition), 500);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Scroller.ItemScroller

js.com.cs.v4.UI.Scroller.ItemScroller = function js_com_cs_v4_UI_Scroller_ItemScroller(containerDiv, animationDirection, animationScrollX, refreshRateMilliseconds, AlignLeft) {
    /// <param name="containerDiv" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </param>
    /// <param name="animationDirection" type="js.com.cs.v4.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.v4.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.v4.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 (ss.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.v4.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_v4_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_v4_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_v4_UI_Scroller_ItemScroller$get_animationDirection() {
        /// <value type="js.com.cs.v4.UI.Scroller.AnimDirection"></value>
        return this._animationDirection;
    },
    set_animationDirection: function js_com_cs_v4_UI_Scroller_ItemScroller$set_animationDirection(value) {
        /// <value type="js.com.cs.v4.UI.Scroller.AnimDirection"></value>
        this._animationDirection = value;
        return value;
    },
    
    get_refreshRateMilliseconds: function js_com_cs_v4_UI_Scroller_ItemScroller$get_refreshRateMilliseconds() {
        /// <value type="Number" integer="true"></value>
        return this._refreshRateMilliseconds;
    },
    set_refreshRateMilliseconds: function js_com_cs_v4_UI_Scroller_ItemScroller$set_refreshRateMilliseconds(value) {
        /// <value type="Number" integer="true"></value>
        this._refreshRateMilliseconds = value;
        return value;
    },
    
    init: function js_com_cs_v4_UI_Scroller_ItemScroller$init() {
        this._initAnimation();
    },
    
    _getChildElements: function js_com_cs_v4_UI_Scroller_ItemScroller$_getChildElements() {
        /// <returns type="jQuery"></returns>
        return this._parentContainerElement.get_jQueryElement().children();
    },
    
    canAnimate: function js_com_cs_v4_UI_Scroller_ItemScroller$canAnimate() {
        /// <returns type="Boolean"></returns>
        return (this._animationScrollX) ? (this._getCombinedWidthOfChildElements() > this._getWidthOfParentElement()) : (this._getCombinedHeightOfChildElements() > this._getHeightOfParentElement());
    },
    
    _initCSS: function js_com_cs_v4_UI_Scroller_ItemScroller$_initCSS() {
        this._childElements.css('position', 'absolute');
    },
    
    _updatePositions: function js_com_cs_v4_UI_Scroller_ItemScroller$_updatePositions() {
        var xPos = 0;
        if (this.canAnimate()) {
            this._parentContainerElement.add_onMouseOver(ss.Delegate.create(this, this._parentContainerElement_onMouseOver));
            this._parentContainerElement.add_onMouseOut(ss.Delegate.create(this, this._parentContainerElement_onMouseOut));
            var offset;
            if (this.get_animationDirection() === js.com.cs.v4.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) {
                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_v4_UI_Scroller_ItemScroller$_parentContainerElement_onMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._beginAnimation();
    },
    
    _parentContainerElement_onMouseOver: function js_com_cs_v4_UI_Scroller_ItemScroller$_parentContainerElement_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        window.clearInterval(this._intervalValue);
    },
    
    _initAnimation: function js_com_cs_v4_UI_Scroller_ItemScroller$_initAnimation() {
        this._initCSS();
        this._updatePositions();
        if (this.canAnimate()) {
            this._beginAnimation();
        }
    },
    
    _beginAnimation: function js_com_cs_v4_UI_Scroller_ItemScroller$_beginAnimation() {
        this._intervalValue = window.setInterval(ss.Delegate.create(this, this._animate), this.get_refreshRateMilliseconds());
    },
    
    _animate: function js_com_cs_v4_UI_Scroller_ItemScroller$_animate() {
        var incrementation = this._movementDistanceInPx;
        incrementation = this._adjustIncrementation(incrementation);
        this._updateChildrenPosition(incrementation);
    },
    
    _updateChildrenPosition: function js_com_cs_v4_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_v4_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) {
                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_v4_UI_Scroller_ItemScroller$_getMargin(elem) {
        /// <param name="elem" type="jQuery">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        if (this._checkLTRWithScrollX()) {
            return parseInt(elem.css('margin-left'));
        }
        if (this._checkRTLWithScrollX()) {
            return parseInt(elem.css('margin-right'));
        }
        if (this._checkLTRWithScrollY()) {
            return parseInt(elem.css('margin-top'));
        }
        if (this._checkRTLWithScrollY()) {
            return parseInt(elem.css('margin-bottom'));
        }
        return 0;
    },
    
    _checkRTLWithScrollY: function js_com_cs_v4_UI_Scroller_ItemScroller$_checkRTLWithScrollY() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v4.UI.Scroller.AnimDirection.rightToLeft && (!this._animationScrollX);
    },
    
    _moveToOtherSide: function js_com_cs_v4_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 = parseInt(elem.css('margin-left'));
            newPos = furthestPos + margin;
        }
        if (this._checkRTLWithScrollY()) {
            margin = parseInt(elem.css('margin-top'));
            newPos = furthestPos + margin;
        }
        elem.css((this._animationScrollX) ? 'left' : 'top', newPos);
    },
    
    _checkElementBounds: function js_com_cs_v4_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_v4_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_v4_UI_Scroller_ItemScroller$_checkRTLWithScrollX() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v4.UI.Scroller.AnimDirection.rightToLeft && this._animationScrollX;
    },
    
    _checkLTRWithScrollX: function js_com_cs_v4_UI_Scroller_ItemScroller$_checkLTRWithScrollX() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v4.UI.Scroller.AnimDirection.leftToRight && this._animationScrollX;
    },
    
    _checkLTRWithScrollY: function js_com_cs_v4_UI_Scroller_ItemScroller$_checkLTRWithScrollY() {
        /// <returns type="Boolean"></returns>
        return this.get_animationDirection() === js.com.cs.v4.UI.Scroller.AnimDirection.leftToRight && (!this._animationScrollX);
    },
    
    _adjustIncrementation: function js_com_cs_v4_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.v4.UI.Scroller.AnimDirection.rightToLeft) {
            incrementation = -incrementation;
        }
        return incrementation;
    },
    
    _getCombinedWidthOfChildElements: function js_com_cs_v4_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 = parseInt(childElem.css('marginRight'));
                }
                else {
                    margin = parseInt(childElem.css('marginBottom'));
                }
                if (!ss.isNullOrUndefined(margin)) {
                    currentWidth -= parseInt(margin);
                }
            }
        }
        return currentWidth;
    },
    
    _getHeightOfParentElement: function js_com_cs_v4_UI_Scroller_ItemScroller$_getHeightOfParentElement() {
        /// <returns type="Number" integer="true"></returns>
        return this._parentContainerElement.get_jQueryElement().width();
    },
    
    _getCombinedHeightOfChildElements: function js_com_cs_v4_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_v4_UI_Scroller_ItemScroller$_getWidthOfParentElement() {
        /// <returns type="Number" integer="true"></returns>
        return this._parentContainerElement.get_jQueryElement().width();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Scroller.Scroller

js.com.cs.v4.UI.Scroller.Scroller = function js_com_cs_v4_UI_Scroller_Scroller(unorderedElement) {
    /// <param name="unorderedElement" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </param>
    /// <field name="_childElements" type="jQuery">
    /// </field>
    /// <field name="_parentContainerElement" type="js.com.cs.v4.Controls.Common.MyUnOrderedListElem">
    /// </field>
    this._parentContainerElement = unorderedElement;
    alert(this._getWidthOfParentElement());
    alert(this._getCombinedWidthOfChildElements());
}
js.com.cs.v4.UI.Scroller.Scroller.prototype = {
    _childElements: null,
    _parentContainerElement: null,
    
    _getCombinedWidthOfChildElements: function js_com_cs_v4_UI_Scroller_Scroller$_getCombinedWidthOfChildElements() {
        /// <returns type="Number" integer="true"></returns>
        this._childElements = js.com.JQueryScriptSharpV2.jQueryUtil.select('li', this._parentContainerElement.get_element());
        var currentWidth = 0;
        for (var count = 0; count < this._childElements.length; count++) {
            currentWidth += this._childElements.eq(count).width();
        }
        return currentWidth;
    },
    
    _getWidthOfParentElement: function js_com_cs_v4_UI_Scroller_Scroller$_getWidthOfParentElement() {
        /// <returns type="Number" integer="true"></returns>
        return this._parentContainerElement.get_jQueryElement().width();
    }
}


Type.registerNamespace('js.com.cs.v4.UI.SelectableSections');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.SelectableSections.ISelectableSection

js.com.cs.v4.UI.SelectableSections.ISelectableSection = function() { 
};
js.com.cs.v4.UI.SelectableSections.ISelectableSection.prototype = {
    get_selected : null,
    select : null,
    unSelect : null,
    get_parentSections : null,
    set_parentSections : null,
    add_onClick : null,
    remove_onClick : null,
    get_element : null
}
js.com.cs.v4.UI.SelectableSections.ISelectableSection.registerInterface('js.com.cs.v4.UI.SelectableSections.ISelectableSection');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.SelectableSections.ISelectableSections

js.com.cs.v4.UI.SelectableSections.ISelectableSections = function() { 
};
js.com.cs.v4.UI.SelectableSections.ISelectableSections.prototype = {
    get_selectedSection : null,
    get_sections : null,
    addSection : null,
    removeSection : null,
    selectSection : null,
    clearSelection : null
}
js.com.cs.v4.UI.SelectableSections.ISelectableSections.registerInterface('js.com.cs.v4.UI.SelectableSections.ISelectableSections');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.SelectableSections.SelectableSectionBase

js.com.cs.v4.UI.SelectableSections.SelectableSectionBase = function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase(element) {
    /// <param name="element" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <field name="_selected$1" type="Boolean">
    /// </field>
    /// <field name="_element$1" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_cssClassSelected" type="String">
    /// </field>
    /// <field name="_parentSections$1" type="js.com.cs.v4.UI.SelectableSections.ISelectableSections">
    /// </field>
    /// <field name="__onClick$1" type="js.com.cs.v4.UI.SelectableSections.ISelectableSectionHandler">
    /// </field>
    js.com.cs.v4.UI.SelectableSections.SelectableSectionBase.initializeBase(this);
    this._element$1 = element;
    this._init$1();
}
js.com.cs.v4.UI.SelectableSections.SelectableSectionBase.prototype = {
    _selected$1: false,
    _element$1: null,
    _cssClassSelected: null,
    _parentSections$1: null,
    
    add_onClick: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$add_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick$1 = ss.Delegate.combine(this.__onClick$1, value);
    },
    remove_onClick: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.__onClick$1 = ss.Delegate.remove(this.__onClick$1, value);
    },
    
    __onClick$1: null,
    
    _init$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$_init$1() {
        this._initHandlers$1();
    },
    
    _initHandlers$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$_initHandlers$1() {
        this._element$1.add_onClick(ss.Delegate.create(this, this._element_onClick$1));
    },
    
    _element_onClick$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$_element_onClick$1(elem, e) {
        /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
        /// </param>
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this.__onClick$1 != null) {
            this.__onClick$1(this);
        }
    },
    
    _updateCss$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$_updateCss$1() {
        this.get_element().removeClass(this._cssClassSelected);
        if (this._selected$1) {
            this.get_element().addClass(this._cssClassSelected);
        }
    },
    
    get_selected: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$get_selected() {
        /// <value type="Boolean"></value>
        return this._selected$1;
    },
    
    select: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$select() {
        this._selected$1 = true;
        this._updateCss$1();
    },
    
    unSelect: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$unSelect() {
        this._selected$1 = false;
        this._updateCss$1();
    },
    
    get_element: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$get_element() {
        /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
        return this._element$1;
    },
    
    get_parentSections: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$get_parentSections() {
        /// <value type="js.com.cs.v4.UI.SelectableSections.ISelectableSections"></value>
        return this._parentSections$1;
    },
    set_parentSections: function js_com_cs_v4_UI_SelectableSections_SelectableSectionBase$set_parentSections(value) {
        /// <value type="js.com.cs.v4.UI.SelectableSections.ISelectableSections"></value>
        this._parentSections$1 = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase

js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase = function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase() {
    /// <field name="_selectedSection$1" type="js.com.cs.v4.UI.SelectableSections.ISelectableSection">
    /// </field>
    /// <field name="_sections$1" type="Array" elementType="ISelectableSection">
    /// </field>
    /// <field name="__onSelectSection$1" type="js.com.cs.v4.UI.SelectableSections.ISelectableSectionHandler">
    /// </field>
    this._sections$1 = [];
    js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase.initializeBase(this);
}
js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase.prototype = {
    _selectedSection$1: null,
    
    add_onSelectSection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$add_onSelectSection(value) {
        /// <param name="value" type="Function" />
        this.__onSelectSection$1 = ss.Delegate.combine(this.__onSelectSection$1, value);
    },
    remove_onSelectSection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$remove_onSelectSection(value) {
        /// <param name="value" type="Function" />
        this.__onSelectSection$1 = ss.Delegate.remove(this.__onSelectSection$1, value);
    },
    
    __onSelectSection$1: null,
    
    selectSection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$selectSection(section) {
        /// <param name="section" type="js.com.cs.v4.UI.SelectableSections.ISelectableSection">
        /// </param>
        if (this._selectedSection$1 !== section) {
            if (this._selectedSection$1 != null) {
                this._selectedSection$1.unSelect();
            }
            this._selectedSection$1 = section;
            if (section != null) {
                section.select();
            }
            if (this.__onSelectSection$1 != null) {
                this.__onSelectSection$1(section);
            }
        }
    },
    
    clearSelection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$clearSelection() {
        this.selectSection(null);
    },
    
    _initSection$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$_initSection$1(section) {
        /// <param name="section" type="js.com.cs.v4.UI.SelectableSections.ISelectableSection">
        /// </param>
        section.set_parentSections(this);
        section.add_onClick(ss.Delegate.create(this, this._section_OnClick$1));
    },
    
    _section_OnClick$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$_section_OnClick$1(target) {
        /// <param name="target" type="js.com.cs.v4.UI.SelectableSections.ISelectableSection">
        /// </param>
        this.selectSection(target);
    },
    
    addSection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$addSection(section) {
        /// <param name="section" type="js.com.cs.v4.UI.SelectableSections.ISelectableSection">
        /// </param>
        if (!this._sections$1.contains(section)) {
            this._sections$1[this._sections$1.length] = section;
            this._initSection$1(section);
        }
    },
    
    removeSection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$removeSection(section) {
        /// <param name="section" type="js.com.cs.v4.UI.SelectableSections.ISelectableSection">
        /// </param>
        if (this._sections$1.contains(section)) {
            js.com.cs.v4.Util.ArrayUtil.removeObjectFromArray(this._sections$1, section);
            section.remove_onClick(ss.Delegate.create(this, this._section_OnClick$1));
        }
    },
    
    _removeAllSections$1: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$_removeAllSections$1() {
        while (this._sections$1.length > 0) {
            this.removeSection(this._sections$1[0]);
        }
    },
    
    destroy: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$destroy() {
        this._removeAllSections$1();
        this._selectedSection$1 = null;
        js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase.callBaseMethod(this, 'destroy');
    },
    
    get_selectedSection: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$get_selectedSection() {
        /// <value type="js.com.cs.v4.UI.SelectableSections.ISelectableSection"></value>
        return this._selectedSection$1;
    },
    
    get_sections: function js_com_cs_v4_UI_SelectableSections_SelectableSectionsBase$get_sections() {
        /// <value type="Array" elementType="ISelectableSection"></value>
        return this._sections$1;
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Skype');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Skype.DisableSkypeController

js.com.cs.v4.UI.Skype.DisableSkypeController = function js_com_cs_v4_UI_Skype_DisableSkypeController() {
}
js.com.cs.v4.UI.Skype.DisableSkypeController.prototype = {
    
    _removeSkype: function js_com_cs_v4_UI_Skype_DisableSkypeController$_removeSkype() {
        js.com.JQueryScriptSharpV2.jQueryUtil.select('.skype_pnh_container').html('');
        js.com.JQueryScriptSharpV2.jQueryUtil.select('.skype_pnh_print_container').removeClass('skype_pnh_print_container');
    },
    
    _init: function js_com_cs_v4_UI_Skype_DisableSkypeController$_init() {
        this._removeSkype();
        window.setTimeout(ss.Delegate.create(this, this._removeSkype), 800);
    }
}


Type.registerNamespace('js.com.cs.v4.UI.SlideShow.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.SlideShow.v1.SlideDetails

js.com.cs.v4.UI.SlideShow.v1.SlideDetails = function js_com_cs_v4_UI_SlideShow_v1_SlideDetails() {
    /// <field name="slideDuration" type="Number" integer="true">
    /// </field>
}
js.com.cs.v4.UI.SlideShow.v1.SlideDetails.prototype = {
    slideDuration: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.SlideShow.v1.SlideShow

js.com.cs.v4.UI.SlideShow.v1.SlideShow = function js_com_cs_v4_UI_SlideShow_v1_SlideShow(ulElement, details) {
    /// <param name="ulElement" type="jQuery">
    /// </param>
    /// <param name="details" type="js.com.cs.v4.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.v4.UI.SlideShow.v1.SlideShow.prototype = {
    _mainElement: null,
    _intID: 0,
    _slideDuration: 0,
    
    _initUL: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$_initUL() {
        this._mainElement.css('position', 'relative');
    },
    
    _init: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$_init() {
        this._initUL();
        this._onlyShowFirst();
        this._initSlideShow();
    },
    
    _initSlideShow: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$_initSlideShow() {
        this._intCallback();
    },
    
    _delay: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$_delay() {
        this._intID = window.setTimeout(ss.Delegate.create(this, this._intCallback), this._slideDuration);
    },
    
    _intCallback: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$_intCallback() {
        this.moveNext(false);
    },
    
    _onlyShowFirst: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$_onlyShowFirst() {
        var liElems = js.com.JQueryScriptSharpV2.jQueryUtil.select('li', this._mainElement);
        liElems.css('position', 'absolute');
        liElems.fadeOut(0);
    },
    
    moveNext: function js_com_cs_v4_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_v4_UI_SlideShow_v1_SlideShow$_mNext() {
        var liElemSelected = js.com.JQueryScriptSharpV2.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, null, ss.Delegate.create(this, this._delay));
        }
        else {
            var firstLI = js.com.JQueryScriptSharpV2.jQueryUtil.select('li', this._mainElement).eq(0).addClass('selected').fadeIn(this._slideDuration, null, ss.Delegate.create(this, this._delay));
        }
    },
    
    movePrevious: function js_com_cs_v4_UI_SlideShow_v1_SlideShow$movePrevious() {
        window.clearInterval(this._intID);
        var liElemSelected = js.com.JQueryScriptSharpV2.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.JQueryScriptSharpV2.jQueryUtil.select('li:last', this._mainElement);
            firstLI.addClass('selected').fadeIn(this._slideDuration);
        }
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Text');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Text.TextFormater

js.com.cs.v4.UI.Text.TextFormater = function js_com_cs_v4_UI_Text_TextFormater() {
}
js.com.cs.v4.UI.Text.TextFormater.convertHTMLToNormalText = function js_com_cs_v4_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.v4.UI.Text.TextOneLineWidthCalculator

js.com.cs.v4.UI.Text.TextOneLineWidthCalculator = function js_com_cs_v4_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.v4.Util.GeneralUtil.getOutherWidth(element);
    var currHeight = js.com.cs.v4.Util.GeneralUtil.getOuterHeight(element);
    element.style.width = '999999px';
    this._minHeight = js.com.cs.v4.Util.GeneralUtil.getOuterHeight(element);
    if (this._minHeight < currHeight) {
        this._calculateMinimumHeight();
    }
}
js.com.cs.v4.UI.Text.TextOneLineWidthCalculator.prototype = {
    _origWidthStyle: null,
    _origHeightStyle: null,
    _minHeight: 0,
    _itemContentWidth: 0,
    
    _calculateMinimumHeight: function js_com_cs_v4_UI_Text_TextOneLineWidthCalculator$_calculateMinimumHeight() {
        var incWidth = 5000;
    },
    
    _init: function js_com_cs_v4_UI_Text_TextOneLineWidthCalculator$_init() {
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Ticker');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Ticker.ROTATE_DIRECTION

js.com.cs.v4.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.v4.UI.Ticker.ROTATE_DIRECTION.prototype = {
    left: 0, 
    right: 1
}
js.com.cs.v4.UI.Ticker.ROTATE_DIRECTION.registerEnum('js.com.cs.v4.UI.Ticker.ROTATE_DIRECTION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Ticker.FadingTicker

js.com.cs.v4.UI.Ticker.FadingTicker = function js_com_cs_v4_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.v4.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.v4.Controls.Common.MyDivElement(divHolderID);
    this._delayMs = delayMs;
    this._fadeDurationMs = fadeDurationMs;
    this._htmlTexts = htmlTexts;
    this._random = random;
    this._index = -1;
    this._init();
}
js.com.cs.v4.UI.Ticker.FadingTicker.prototype = {
    _fadeDurationMs: 1000,
    
    get_fadeDurationMs: function js_com_cs_v4_UI_Ticker_FadingTicker$get_fadeDurationMs() {
        /// <value type="Number" integer="true"></value>
        return this._fadeDurationMs;
    },
    set_fadeDurationMs: function js_com_cs_v4_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_v4_UI_Ticker_FadingTicker$get_delayMs() {
        /// <value type="Number" integer="true"></value>
        return this._delayMs;
    },
    set_delayMs: function js_com_cs_v4_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_v4_UI_Ticker_FadingTicker$_reset() {
        if (this._random) {
            this._htmlTexts = js.com.cs.v4.Util.ArrayUtil.randomizeArray(this._htmlTexts);
        }
        this._index = -1;
    },
    
    _init: function js_com_cs_v4_UI_Ticker_FadingTicker$_init() {
        this._reset();
        this._next();
    },
    
    _showNextText: function js_com_cs_v4_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(), null, ss.Delegate.create(this, this._onTextShown));
    },
    
    _next: function js_com_cs_v4_UI_Ticker_FadingTicker$_next() {
        if (this._initial) {
            this._onTextHidden();
            this._initial = false;
        }
        else {
            this._divHolder.get_jQueryElement().fadeOut(this.get_fadeDurationMs(), null, ss.Delegate.create(this, this._onTextHidden));
        }
    },
    
    _onTextShown: function js_com_cs_v4_UI_Ticker_FadingTicker$_onTextShown() {
        this._currTimeoutHandler = window.setTimeout(ss.Delegate.create(this, this._next), this.get_delayMs());
    },
    
    _onTextHidden: function js_com_cs_v4_UI_Ticker_FadingTicker$_onTextHidden() {
        this._showNextText();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Ticker.RotatingTicker

js.com.cs.v4.UI.Ticker.RotatingTicker = function js_com_cs_v4_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.v4.UI.Ticker.ROTATE_DIRECTION">
    /// Move left / right
    /// </param>
    /// <field name="_rotateDirection" type="js.com.cs.v4.UI.Ticker.ROTATE_DIRECTION">
    /// </field>
    /// <field name="_htmlText" type="String">
    /// </field>
    /// <field name="_divHolder" type="js.com.cs.v4.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_stopOnMouseOver" type="Boolean">
    /// </field>
    /// <field name="_content1" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="_content2" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </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.v4.Controls.Common.MyDivElement(divHolderID);
    this._htmlText = htmlText;
    this._rotateDirection = rotateDirection;
    this._stopOnMouseOver = stopOnMouseOver;
    this._initialOffset = initialOffset;
    this._content1 = new js.com.cs.v4.Controls.Common.MyElement(document.createElement('nobr'));
    this._content2 = new js.com.cs.v4.Controls.Common.MyElement(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(ss.Delegate.create(this, this._divHolder_onMouseOver));
    this._divHolder.add_onMouseOut(ss.Delegate.create(this, this._divHolder_onMouseOut));
}
js.com.cs.v4.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_v4_UI_Ticker_RotatingTicker$_divHolder_onMouseOut(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._stopOnMouseOver) {
            this.start();
        }
    },
    
    _divHolder_onMouseOver: function js_com_cs_v4_UI_Ticker_RotatingTicker$_divHolder_onMouseOver(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        if (this._stopOnMouseOver) {
            this.stop();
        }
    },
    
    _resetPositions: function js_com_cs_v4_UI_Ticker_RotatingTicker$_resetPositions() {
        this._content1.get_style().left = '0px';
        this._content1Pos = 0;
        if (this._rotateDirection === js.com.cs.v4.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_v4_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_v4_UI_Ticker_RotatingTicker$_setInitialOffset() {
        this._content1Pos += this._initialOffset;
        this._content2Pos += this._initialOffset;
        this._updateTextPositions();
    },
    
    _initTicker: function js_com_cs_v4_UI_Ticker_RotatingTicker$_initTicker() {
        this._divHolder.appendChild(this._content2);
        this._resetPositions();
        this._setInitialOffset();
        this.start();
    },
    
    stop: function js_com_cs_v4_UI_Ticker_RotatingTicker$stop() {
        window.clearInterval(this._updateHandler);
    },
    
    start: function js_com_cs_v4_UI_Ticker_RotatingTicker$start() {
        window.clearInterval(this._updateHandler);
        this._updateHandler = window.setInterval(ss.Delegate.create(this, this._tick), this._updateDelayMS);
    },
    
    _tick: function js_com_cs_v4_UI_Ticker_RotatingTicker$_tick() {
        if (this._rotateDirection === js.com.cs.v4.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_v4_UI_Ticker_RotatingTicker$_init() {
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Tooltip');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Tooltip.ControlTooltipParams

js.com.cs.v4.UI.Tooltip.ControlTooltipParams = function js_com_cs_v4_UI_Tooltip_ControlTooltipParams() {
    /// <field name="tooltipContentID" type="String">
    /// </field>
    /// <field name="tooltipContent" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="tooltipIconID" type="String">
    /// </field>
    /// <field name="tooltipIcon" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </field>
    /// <field name="fadeDurationMs" type="Number" integer="true">
    /// </field>
    /// <field name="alignPosition" type="js.com.cs.v4.Enums.POSITION">
    /// </field>
    /// <field name="cssClassRollover" type="String">
    /// </field>
    /// <field name="cssClassNormal" type="String">
    /// </field>
    /// <field name="cssClassTooltipContent" type="String">
    /// </field>
    /// <field name="doNotHide" type="Boolean">
    /// This is used for testing the CSS to temporary not hide
    /// </field>
    this.alignPosition = js.com.cs.v4.Enums.POSITION.right;
}
js.com.cs.v4.UI.Tooltip.ControlTooltipParams.prototype = {
    tooltipContentID: null,
    tooltipContent: null,
    tooltipIconID: null,
    tooltipIcon: null,
    fadeDurationMs: 300,
    cssClassRollover: 'tooltip-icon-over',
    cssClassNormal: 'tooltip-icon',
    cssClassTooltipContent: 'tooltip-content',
    doNotHide: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Tooltip.ControlTooltip

js.com.cs.v4.UI.Tooltip.ControlTooltip = function js_com_cs_v4_UI_Tooltip_ControlTooltip(parameters) {
    /// <summary>
    /// Create a tooltip attached with a control which is shown next to the control
    /// on hover.
    /// </summary>
    /// <param name="parameters" type="js.com.cs.v4.UI.Tooltip.ControlTooltipParams">
    /// </param>
    /// <field name="_params$1" type="js.com.cs.v4.UI.Tooltip.ControlTooltipParams">
    /// </field>
    /// <field name="_positioner$1" type="js.com.cs.v4.UI.Position.ControlPositioner">
    /// </field>
    /// <field name="_showing$1" type="Boolean">
    /// </field>
    /// <field name="_COUNT$1" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_tempCount$1" type="Number" integer="true">
    /// </field>
    js.com.cs.v4.UI.Tooltip.ControlTooltip.initializeBase(this);
    this._params$1 = parameters;
    this._tempCount$1 = js.com.cs.v4.UI.Tooltip.ControlTooltip._COUNT$1;
    js.com.cs.v4.UI.Tooltip.ControlTooltip._COUNT$1++;
    if (this._params$1.tooltipContent == null) {
        this._params$1.tooltipContent = js.com.cs.v4.Util.GeneralUtil.getElementAsMyElement(this._params$1.tooltipContentID);
    }
    if (this._params$1.tooltipIcon == null) {
        this._params$1.tooltipIcon = js.com.cs.v4.Util.GeneralUtil.getElementAsMyElement(this._params$1.tooltipIconID);
    }
    if (this._params$1.tooltipContent == null) {
        throw new Error('Please specify tooltipContent or tooltipContentID');
    }
    if (this._params$1.tooltipIcon == null) {
        throw new Error('Please specify tooltipIcon or tooltipIconID');
    }
    this._positioner$1 = new js.com.cs.v4.UI.Position.ControlPositioner(this._getParams$1(this._params$1));
    this._params$1.tooltipIcon.addClass(this._params$1.cssClassNormal);
    this._params$1.tooltipContent.get_style().display = 'none';
    this._params$1.tooltipContent.addClass(this._params$1.cssClassTooltipContent);
    this._params$1.tooltipContent.remove();
    this._init$1();
}
js.com.cs.v4.UI.Tooltip.ControlTooltip.prototype = {
    _params$1: null,
    _positioner$1: null,
    
    get_positioner: function js_com_cs_v4_UI_Tooltip_ControlTooltip$get_positioner() {
        /// <value type="js.com.cs.v4.UI.Position.ControlPositioner"></value>
        return this._positioner$1;
    },
    
    _showing$1: false,
    _tempCount$1: 0,
    
    _getParams$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_getParams$1(parameters) {
        /// <param name="parameters" type="js.com.cs.v4.UI.Tooltip.ControlTooltipParams">
        /// </param>
        /// <returns type="js.com.cs.v4.UI.Position.ControlPositionerParams"></returns>
        var p = new js.com.cs.v4.UI.Position.ControlPositionerParams();
        p.alignPosition = parameters.alignPosition;
        p.controlToPosition = parameters.tooltipContent;
        p.controlToPositionID = parameters.tooltipContentID;
        p.relativeToControl = parameters.tooltipIcon;
        p.relativeToControlID = parameters.tooltipIconID;
        p.initialAttachToWindowResize = false;
        p.initialPositionAutomatically = false;
        return p;
    },
    
    _initHandlers$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_initHandlers$1() {
        this._removeHandlers$1();
        this._params$1.tooltipIcon.add_onMouseEnter(ss.Delegate.create(this, this._relativeToControl_onMouseEnter$1));
    },
    
    _removeHandlers$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_removeHandlers$1() {
        this._params$1.tooltipIcon.remove_onMouseEnter(ss.Delegate.create(this, this._relativeToControl_onMouseEnter$1));
        this._params$1.tooltipIcon.remove_onMouseLeave(ss.Delegate.create(this, this._relativeToControl_onMouseLeave$1));
    },
    
    _relativeToControl_onMouseLeave$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_relativeToControl_onMouseLeave$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._params$1.tooltipIcon.remove_onMouseLeave(ss.Delegate.create(this, this._relativeToControl_onMouseLeave$1));
        this._params$1.tooltipIcon.toggle2CssClasses(this._params$1.cssClassRollover, this._params$1.cssClassNormal, false);
        this.hideTooltip(false);
    },
    
    _relativeToControl_onMouseEnter$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_relativeToControl_onMouseEnter$1(e) {
        /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
        /// </param>
        this._params$1.tooltipIcon.add_onMouseLeave(ss.Delegate.create(this, this._relativeToControl_onMouseLeave$1));
        this._params$1.tooltipIcon.toggle2CssClasses(this._params$1.cssClassRollover, this._params$1.cssClassNormal, true);
        this.showTooltip();
    },
    
    _init$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_init$1() {
        this._initHandlers$1();
    },
    
    hideTooltip: function js_com_cs_v4_UI_Tooltip_ControlTooltip$hideTooltip(destroyAndRemoveElements) {
        /// <param name="destroyAndRemoveElements" type="Boolean">
        /// </param>
        if (this._showing$1 && !this._params$1.doNotHide) {
            js.com.cs.v4.Util.Console.log('hide tooltip: ' + this._params$1.tooltipContent.get_innerHTML());
            this._positioner$1.stopAttachToWindowResize();
            this._params$1.tooltipContent.get_style().display = 'none';
            this._showing$1 = false;
        }
    },
    
    _onHideTooltipContentComplete$1: function js_com_cs_v4_UI_Tooltip_ControlTooltip$_onHideTooltipContentComplete$1() {
        this._params$1.tooltipContent.remove();
    },
    
    showTooltip: function js_com_cs_v4_UI_Tooltip_ControlTooltip$showTooltip() {
        if (!this._showing$1) {
            js.com.cs.v4.Util.Console.log('show tooltip: ' + this._params$1.tooltipContent.get_innerHTML());
            this._params$1.tooltipContent.get_style().display = '';
            this._positioner$1.position(true);
            this._showing$1 = true;
        }
    },
    
    hideDestroyAndRemoveElements: function js_com_cs_v4_UI_Tooltip_ControlTooltip$hideDestroyAndRemoveElements() {
        this.hideTooltip(true);
    },
    
    destroyAndRemoveElements: function js_com_cs_v4_UI_Tooltip_ControlTooltip$destroyAndRemoveElements() {
        this.destroy();
        if (this._positioner$1 != null) {
            this._positioner$1.destroyAndRemoveElements();
            this._positioner$1 = null;
        }
    },
    
    stop: function js_com_cs_v4_UI_Tooltip_ControlTooltip$stop() {
        /// <summary>
        /// Stop the attach with mouse enter / leave
        /// </summary>
        this._removeHandlers$1();
    },
    
    start: function js_com_cs_v4_UI_Tooltip_ControlTooltip$start() {
        /// <summary>
        /// Start the attach with mouse enter / leave
        /// </summary>
        this._initHandlers$1();
    },
    
    destroy: function js_com_cs_v4_UI_Tooltip_ControlTooltip$destroy() {
        if (!this.get_destroyed()) {
            this._removeHandlers$1();
        }
        js.com.cs.v4.UI.Tooltip.ControlTooltip.callBaseMethod(this, 'destroy');
    }
}


Type.registerNamespace('js.com.cs.v4.UI.Uploadify.v1');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.UI.Uploadify.v1._uploadify

js.com.cs.v4.UI.Uploadify.v1._uploadify = function js_com_cs_v4_UI_Uploadify_v1__uploadify() {
}


Type.registerNamespace('js.com.cs.v4.Util');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION

js.com.cs.v4.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.v4.Util.POPUP_WINDOW_OPEN_POSITION.prototype = {
    center: 10, 
    random: 20, 
    none: 0
}
js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION.registerEnum('js.com.cs.v4.Util.POPUP_WINDOW_OPEN_POSITION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.AjaxUtil

js.com.cs.v4.Util.AjaxUtil = function js_com_cs_v4_Util_AjaxUtil() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.ArrayUtil

js.com.cs.v4.Util.ArrayUtil = function js_com_cs_v4_Util_ArrayUtil() {
}
js.com.cs.v4.Util.ArrayUtil._randomCompareCallback = function js_com_cs_v4_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.v4.Util.ArrayUtil.clone = function js_com_cs_v4_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.v4.Util.ArrayUtil.randomizeArray = function js_com_cs_v4_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.v4.Util.ArrayUtil.clone(a);
    b.sort(js.com.cs.v4.Util.ArrayUtil._randomCompareCallback);
    if (b[0] === lastElement) {
        return js.com.cs.v4.Util.ArrayUtil.randomizeArray(b);
    }
    else {
        return b;
    }
}
js.com.cs.v4.Util.ArrayUtil.findItem = function js_com_cs_v4_Util_ArrayUtil$findItem(array, item) {
    /// <param name="array" type="Object">
    /// </param>
    /// <param name="item" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var a = array;
    if (a != null) {
        for (var i = 0; i < a.length; i++) {
            if (a[i] === item) {
                return i;
            }
        }
    }
    return -1;
}
js.com.cs.v4.Util.ArrayUtil.swapItems = function js_com_cs_v4_Util_ArrayUtil$swapItems(array, index1, index2) {
    /// <param name="array" type="Object">
    /// </param>
    /// <param name="index1" type="Number" integer="true">
    /// </param>
    /// <param name="index2" type="Number" integer="true">
    /// </param>
    var a = array;
    var tmp = a[index1];
    a[index1] = a[index2];
    a[index2] = tmp;
}
js.com.cs.v4.Util.ArrayUtil.addItemInArray = function js_com_cs_v4_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.v4.Util.ArrayUtil.addItemInArrayAt = function js_com_cs_v4_Util_ArrayUtil$addItemInArrayAt(oArray, item, index) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="item" type="Object">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    js.com.cs.v4.Util.ArrayUtil.addItemInArray(oArray, item, index);
}
js.com.cs.v4.Util.ArrayUtil.addItemsInArray = function js_com_cs_v4_Util_ArrayUtil$addItemsInArray(array, items) {
    /// <param name="array" type="Object">
    /// </param>
    /// <param name="items" type="Array" elementType="Object">
    /// </param>
    var a = array;
    js.com.cs.v4.Util.ArrayUtil.addItemsInArrayAt(array, items, a.length);
}
js.com.cs.v4.Util.ArrayUtil.addItemsInArrayAt = function js_com_cs_v4_Util_ArrayUtil$addItemsInArrayAt(oArray, items, index) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="items" type="Array" elementType="Object">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    for (var i = 0; i < items.length; i++) {
        js.com.cs.v4.Util.ArrayUtil.addItemInArray(oArray, items[i], index + i);
    }
}
js.com.cs.v4.Util.ArrayUtil.removeObjectFromArray = function js_com_cs_v4_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.v4.Util.ArrayUtil.removeItemFromArray(a, i);
            break;
        }
    }
}
js.com.cs.v4.Util.ArrayUtil.removeItemFromArray = function js_com_cs_v4_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.v4.Util.ArrayUtil.removeItemsFromArray = function js_com_cs_v4_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.v4.Util.ArrayUtil.removeItemFromArray(oArray, from);
    }
}
js.com.cs.v4.Util.ArrayUtil.removeObjectsFromArray = function js_com_cs_v4_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.v4.Util.ArrayUtil.removeItemFromArray(a, i);
            amtRemoved++;
            i--;
        }
    }
    return amtRemoved;
}
js.com.cs.v4.Util.ArrayUtil.pop = function js_com_cs_v4_Util_ArrayUtil$pop(arr) {
    /// <param name="arr" type="Object">
    /// </param>
    /// <returns type="Object"></returns>
    return arr.pop();
}
js.com.cs.v4.Util.ArrayUtil.contains = function js_com_cs_v4_Util_ArrayUtil$contains(arr, itemToCheck) {
    /// <param name="arr" type="Object">
    /// </param>
    /// <param name="itemToCheck" type="Object">
    /// </param>
    /// <returns type="Boolean"></returns>
    var a = arr;
    for (var i = 0; i < a.length; i++) {
        if (a[i] === itemToCheck) {
            return true;
        }
    }
    return false;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.Console

js.com.cs.v4.Util.Console = function js_com_cs_v4_Util_Console() {
}
js.com.cs.v4.Util.Console.log = function js_com_cs_v4_Util_Console$log(msg) {
    /// <param name="msg" type="Object">
    /// </param>
    try {
        var t = console;
        t.log(msg);
    }
    catch (ex) {
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util._CookieOptions

js.com.cs.v4.Util._CookieOptions = function js_com_cs_v4_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.v4.Util._CookieOptions.prototype = {
    expires: null,
    path: null,
    domain: null,
    secure: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.CookieUtil

js.com.cs.v4.Util.CookieUtil = function js_com_cs_v4_Util_CookieUtil() {
}
js.com.cs.v4.Util.CookieUtil.getCookie = function js_com_cs_v4_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.v4.Util.StringUtil.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = js.com.cs.v4.Util.GeneralUtil.decodeURIComponent(cookie.substr(name.length + 1, name.length));
                break;
            }
        }
    }
    return cookieValue;
}
js.com.cs.v4.Util.CookieUtil.setCookie = function js_com_cs_v4_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.v4.Util._CookieOptions">
    /// </param>
    options = (options != null) ? options : {};
    if (value == null) {
        value = '';
        options.expires = -1;
    }
    var expires = '';
    if (options.expires != null && (!isNaN(Number.parse(options.expires.toString())) || options.expires.toString() != null)) {
        var date;
        if (!isNaN(Number.parse(options.expires.toString()))) {
            date = new Date();
            var intExpires = parseInt(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.v4.Util.GeneralUtil.encodeURIComponent(value));
    (arr).add(expires);
    (arr).add(path);
    (arr).add(domain);
    (arr).add(secure);
    document.cookie = arr.join('');
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.DateUtil

js.com.cs.v4.Util.DateUtil = function js_com_cs_v4_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.v4.Util.DateUtil._initMonthsDays = function js_com_cs_v4_Util_DateUtil$_initMonthsDays() {
    if (js.com.cs.v4.Util.DateUtil.montH_NAMES == null) {
        js.com.cs.v4.Util.DateUtil.montH_NAMES = [];
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'January';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'February';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'March';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'April';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'May';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'June';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'July';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'August';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'September';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'October';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'November';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'December';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Jan';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Feb';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Mar';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Apr';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'May';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Jul';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Aug';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Sep';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Oct';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Nov';
        js.com.cs.v4.Util.DateUtil.montH_NAMES[js.com.cs.v4.Util.DateUtil.montH_NAMES.length] = 'Dec';
    }
    if (js.com.cs.v4.Util.DateUtil.daY_NAMES == null) {
        js.com.cs.v4.Util.DateUtil.daY_NAMES = [];
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Sunday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Monday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Tuesday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Wednesday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Thursday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Friday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Saturday';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Sun';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Mon';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Tue';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Wed';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Thu';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Fri';
        js.com.cs.v4.Util.DateUtil.daY_NAMES[js.com.cs.v4.Util.DateUtil.daY_NAMES.length] = 'Sat';
    }
}
js.com.cs.v4.Util.DateUtil.LZ = function js_com_cs_v4_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.v4.Util.DateUtil._isDate = function js_com_cs_v4_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.v4.Util.DateUtil._getDateFromFormat(val, format);
    if (!date) {
        return false;
    }
    return true;
}
js.com.cs.v4.Util.DateUtil._compareDates = function js_com_cs_v4_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.v4.Util.DateUtil._getDateFromFormat(date1, dateformat1);
    var d2 = js.com.cs.v4.Util.DateUtil._getDateFromFormat(date2, dateformat2);
    if (!d1 || !d2) {
        return -1;
    }
    else if (d1 > d2) {
        return 1;
    }
    return 0;
}
js.com.cs.v4.Util.DateUtil._formatDate = function js_com_cs_v4_Util_DateUtil$_formatDate(date, format) {
    /// <param name="date" type="Date">
    /// </param>
    /// <param name="format" type="String">
    /// </param>
    /// <returns type="String"></returns>
    js.com.cs.v4.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, sec, 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.v4.Util.DateUtil.LZ(M);
    value['MMM'] = js.com.cs.v4.Util.DateUtil.montH_NAMES[M - 1];
    value['NNN'] = js.com.cs.v4.Util.DateUtil.montH_NAMES[M + 11];
    value['d'] = d;
    value['dd'] = js.com.cs.v4.Util.DateUtil.LZ(d);
    value['E'] = js.com.cs.v4.Util.DateUtil.daY_NAMES[E + 7];
    value['EE'] = js.com.cs.v4.Util.DateUtil.daY_NAMES[E];
    value['H'] = H;
    value['HH'] = js.com.cs.v4.Util.DateUtil.LZ(H);
    if (!H) {
        value['h'] = 12;
    }
    else if (H > 12) {
        value['h'] = H - 12;
    }
    else {
        value['h'] = H;
    }
    value['hh'] = js.com.cs.v4.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.v4.Util.DateUtil.LZ(value['K']);
    value['kk'] = js.com.cs.v4.Util.DateUtil.LZ(value['k']);
    if (H > 11) {
        value['a'] = 'PM';
    }
    else {
        value['a'] = 'AM';
    }
    value['m'] = m;
    value['mm'] = js.com.cs.v4.Util.DateUtil.LZ(m);
    value['s'] = s;
    value['ss'] = js.com.cs.v4.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.v4.Util.DateUtil._isInteger = function js_com_cs_v4_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.v4.Util.DateUtil._getInt = function js_com_cs_v4_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.v4.Util.DateUtil._getDateFromFormat = function js_com_cs_v4_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.v4.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 sec = 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.v4.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.v4.Util.DateUtil.montH_NAMES.length; i++) {
                var month_name = js.com.cs.v4.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.v4.Util.DateUtil.daY_NAMES.length; i++) {
                var day_name = js.com.cs.v4.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.v4.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.v4.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.v4.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.v4.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.v4.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.v4.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.v4.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') {
            sec = js.com.cs.v4.Util.DateUtil._getInt(val, i_val, token.length, 2);
            if (sec == null || (sec < 0) || (sec > 59)) {
                return 0;
            }
            i_val += sec.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)) && (!!(year % 100))) || (!(year % 400))) {
            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, sec);
    return newdate.getTime();
}
js.com.cs.v4.Util.DateUtil._parseDate = function js_com_cs_v4_Util_DateUtil$_parseDate(val, preferEuroFormat) {
    /// <param name="val" type="String">
    /// </param>
    /// <param name="preferEuroFormat" type="Boolean">
    /// </param>
    /// <returns type="Date"></returns>
    var preferEuro = (!ss.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.v4.Util.DateUtil._getDateFromFormat(val, l[j]);
            if (!!d) {
                return new Date(d);
            }
        }
    }
    return null;
}
js.com.cs.v4.Util.DateUtil.parseStringToDate = function js_com_cs_v4_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.v4.Util.DateUtil._getDateFromFormat(value, dateFormat);
    if (!time) {
        return null;
    }
    return new Date(time);
}
js.com.cs.v4.Util.DateUtil.formatDate = function js_com_cs_v4_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.v4.Util.DateUtil._formatDate(date, format);
}
js.com.cs.v4.Util.DateUtil.dateToISO8601String = function js_com_cs_v4_Util_DateUtil$dateToISO8601String(d, includeTime) {
    /// <param name="d" type="Date">
    /// </param>
    /// <param name="includeTime" type="Boolean">
    /// </param>
    /// <returns type="String"></returns>
    var format = 'yyyy-MM-dd';
    if (includeTime) {
        format += ' HH:mm:ss';
    }
    return js.com.cs.v4.Util.DateUtil.formatDate(d, format);
}
js.com.cs.v4.Util.DateUtil.dateFromISO8601String = function js_com_cs_v4_Util_DateUtil$dateFromISO8601String(d) {
    /// <param name="d" type="String">
    /// </param>
    /// <returns type="Date"></returns>
    var format = 'yyyy-MM-dd';
    var parsedDate = null;
    parsedDate = js.com.cs.v4.Util.DateUtil.parseStringToDate(d, format);
    if (parsedDate === null) {
        format += ' HH:mm:ss';
        parsedDate = js.com.cs.v4.Util.DateUtil.parseStringToDate(d, format);
    }
    return parsedDate;
}
js.com.cs.v4.Util.DateUtil.getDaysOfMonth = function js_com_cs_v4_Util_DateUtil$getDaysOfMonth(month, year) {
    /// <param name="month" type="Number" integer="true">
    /// 1-12
    /// </param>
    /// <param name="year" type="Number" integer="true">
    /// 2001
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return new Date(year, month, 0).getDate();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.DOMUtil

js.com.cs.v4.Util.DOMUtil = function js_com_cs_v4_Util_DOMUtil() {
    /// <field name="_DOCUMENT" type="js.com.cs.v4.Controls.Common.MyElement" static="true">
    /// </field>
    /// <field name="_BODY" type="js.com.cs.v4.Controls.Common.MyElement" static="true">
    /// </field>
}
js.com.cs.v4.Util.DOMUtil.get_document = function js_com_cs_v4_Util_DOMUtil$get_document() {
    /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
    if (js.com.cs.v4.Util.DOMUtil._DOCUMENT == null) {
        js.com.cs.v4.Util.DOMUtil._DOCUMENT = new js.com.cs.v4.Controls.Common.MyElement(js.com.JQueryScriptSharpV2.jQueryUtil.select(document));
    }
    return js.com.cs.v4.Util.DOMUtil._DOCUMENT;
}
js.com.cs.v4.Util.DOMUtil.replaceNodeInDom = function js_com_cs_v4_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.v4.Controls.Common.MyElement(node);
    myNode.get_jQueryElement().replaceWith(replaceWith);
}
js.com.cs.v4.Util.DOMUtil.get_body = function js_com_cs_v4_Util_DOMUtil$get_body() {
    /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
    if (js.com.cs.v4.Util.DOMUtil._BODY == null) {
        js.com.cs.v4.Util.DOMUtil._BODY = new js.com.cs.v4.Controls.Common.MyElement(js.com.JQueryScriptSharpV2.jQueryUtil.select('body'));
    }
    return js.com.cs.v4.Util.DOMUtil._BODY;
}
js.com.cs.v4.Util.DOMUtil._isChildOf = function js_com_cs_v4_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.v4.Util.DOMUtil._isChildOf(childParent, parent);
    }
}
js.com.cs.v4.Util.DOMUtil.isChildOf = function js_com_cs_v4_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.v4.Util.DOMUtil._isChildOf(child, parent);
}
js.com.cs.v4.Util.DOMUtil.isCheckbox = function js_com_cs_v4_Util_DOMUtil$isCheckbox(elem) {
    /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <returns type="Boolean"></returns>
    return elem.get_tagName().toLowerCase() === 'input' && elem.getAttribute('type') === 'checkbox';
}
js.com.cs.v4.Util.DOMUtil.isRadioButton = function js_com_cs_v4_Util_DOMUtil$isRadioButton(elem) {
    /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <returns type="Boolean"></returns>
    return elem.get_tagName().toLowerCase() === 'input' && elem.getAttribute('type') === 'radio';
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.EventUtil

js.com.cs.v4.Util.EventUtil = function js_com_cs_v4_Util_EventUtil() {
}
js.com.cs.v4.Util.EventUtil.preventDefault = function js_com_cs_v4_Util_EventUtil$preventDefault(e) {
    /// <param name="e" type="ElementEvent">
    /// </param>
    e.preventDefault();
}
js.com.cs.v4.Util.EventUtil.addEventListener = function js_com_cs_v4_Util_EventUtil$addEventListener(item, eventName, handler, useCapture) {
    /// <param name="item" type="Object">
    /// </param>
    /// <param name="eventName" type="String">
    /// Do not include the 'on' prefix, just 'click' or 'load' ...
    /// </param>
    /// <param name="handler" type="Action">
    /// </param>
    /// <param name="useCapture" type="Boolean">
    /// </param>
    if (!js.com.cs.v4.Util.GeneralUtil.isIE() || js.com.cs.v4.Util.GeneralUtil.isIE() > 6) {
        item.addEventListener(eventName, handler, useCapture);
    }
    else {
        eventName = 'on' + eventName;
        item.attachEvent(eventName, handler, useCapture);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.FileUtil

js.com.cs.v4.Util.FileUtil = function js_com_cs_v4_Util_FileUtil() {
}
js.com.cs.v4.Util.FileUtil.isImage = function js_com_cs_v4_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.v4.Util.FileUtil.isSWF = function js_com_cs_v4_Util_FileUtil$isSWF(fileName) {
    /// <param name="fileName" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    fileName = fileName.toLowerCase();
    return fileName.endsWith('.swf');
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.FormUtil

js.com.cs.v4.Util.FormUtil = function js_com_cs_v4_Util_FormUtil() {
}
js.com.cs.v4.Util.FormUtil.updateCurrentFormActionToCurrentBrowserUrl = function js_com_cs_v4_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.v4.Util.GeneralUtil

js.com.cs.v4.Util.GeneralUtil = function js_com_cs_v4_Util_GeneralUtil() {
}
js.com.cs.v4.Util.GeneralUtil.getChildControls = function js_com_cs_v4_Util_GeneralUtil$getChildControls(elem) {
    /// <summary>
    /// Returns all the child controls in one list
    /// </summary>
    /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </param>
    /// <returns type="Array" elementType="MyElement"></returns>
    if (Type.canCast(elem, Object)) {
        elem = new js.com.cs.v4.Controls.Common.MyElement(elem);
    }
    var list = new js.com.cs.v4.Classes.General.Arrays.MyArray();
    var curr = elem;
    list.push(curr);
    for (var i = 0; i < elem.get_element().children.length; i++) {
        var currList = js.com.cs.v4.Util.GeneralUtil.getChildControls(elem.get_element().children[i]);
        for (var j = 0; j < currList.length; j++) {
            list.push(currList[j]);
        }
    }
    return list.getBaseArray();
}
js.com.cs.v4.Util.GeneralUtil.compareDelegate = function js_com_cs_v4_Util_GeneralUtil$compareDelegate(delegateA, delegateB) {
    /// <summary>
    /// Checks whether two delegates in JS are exactly the same delegate
    /// </summary>
    /// <param name="delegateA" type="ss.Delegate">
    /// </param>
    /// <param name="delegateB" type="ss.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 (ss.isNullOrUndefined(targetsA) && ss.isNullOrUndefined(targetsB)) {
        return true;
    }
    else if (!ss.isNullOrUndefined(targetsA) && !ss.isNullOrUndefined(targetsB)) {
        return targetsA[0] === targetsB[0] && targetsA[1] === targetsB[1];
    }
    else {
        return false;
    }
}
js.com.cs.v4.Util.GeneralUtil.getDelegateFunction = function js_com_cs_v4_Util_GeneralUtil$getDelegateFunction(d) {
    /// <param name="d" type="ss.Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    if (!ss.isNullOrUndefined(targets)) {
        return targets[1];
    }
    else {
        return null;
    }
}
js.com.cs.v4.Util.GeneralUtil.getDelegateScope = function js_com_cs_v4_Util_GeneralUtil$getDelegateScope(d) {
    /// <param name="d" type="ss.Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    if (!ss.isNullOrUndefined(targets)) {
        return targets[0];
    }
    else {
        return null;
    }
}
js.com.cs.v4.Util.GeneralUtil.getActualDelegate = function js_com_cs_v4_Util_GeneralUtil$getActualDelegate(delegateFn) {
    /// <param name="delegateFn" type="ss.Delegate">
    /// </param>
    /// <returns type="ss.Delegate"></returns>
    var targetsA = delegateFn._targets;
    return targetsA[1];
}
js.com.cs.v4.Util.GeneralUtil.hitch = function js_com_cs_v4_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.v4.Util.GeneralUtil.getOutherWidth = function js_com_cs_v4_Util_GeneralUtil$getOutherWidth(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.JQueryScriptSharpV2.jQueryUtil.selectByElements(element).outerWidth(true);
}
js.com.cs.v4.Util.GeneralUtil.getOuterHeight = function js_com_cs_v4_Util_GeneralUtil$getOuterHeight(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.JQueryScriptSharpV2.jQueryUtil.selectByElements(element).outerHeight(true);
}
js.com.cs.v4.Util.GeneralUtil.isIE = function js_com_cs_v4_Util_GeneralUtil$isIE() {
    /// <summary>
    /// Returns IE version, 0 if not IE
    /// </summary>
    /// <returns type="Number" integer="true"></returns>
    if (jQuery.browser.msie) {
        return parseInt(jQuery.browser.version.substring(0, 1));
    }
    return 0;
}
js.com.cs.v4.Util.GeneralUtil.isIE6 = function js_com_cs_v4_Util_GeneralUtil$isIE6() {
    /// <returns type="Boolean"></returns>
    var ieVersion = js.com.cs.v4.Util.GeneralUtil.isIE();
    return !!ieVersion && ieVersion < 7;
}
js.com.cs.v4.Util.GeneralUtil.elementExists = function js_com_cs_v4_Util_GeneralUtil$elementExists(id) {
    /// <param name="id" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return !ss.isNullOrUndefined(id) && js.com.JQueryScriptSharpV2.jQueryUtil.selectById(id).length > 0;
}
js.com.cs.v4.Util.GeneralUtil.encodeURIComponent = function js_com_cs_v4_Util_GeneralUtil$encodeURIComponent(value) {
    /// <param name="value" type="Object">
    /// </param>
    /// <returns type="String"></returns>
    return encodeURIComponent(value);
}
js.com.cs.v4.Util.GeneralUtil.decodeURIComponent = function js_com_cs_v4_Util_GeneralUtil$decodeURIComponent(value) {
    /// <param name="value" type="Object">
    /// </param>
    /// <returns type="String"></returns>
    return decodeURIComponent(value);
}
js.com.cs.v4.Util.GeneralUtil.copyPropertiesFromToObject = function js_com_cs_v4_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.v4.Util.GeneralUtil.disableAllFields = function js_com_cs_v4_Util_GeneralUtil$disableAllFields(container, disable) {
    /// <param name="container" type="jQuery">
    /// </param>
    /// <param name="disable" type="Boolean">
    /// </param>
    if (Type.canCast(container, js.com.cs.v4.Controls.Common.MyElement)) {
        container = (container).get_jQueryElement();
    }
    js.com.JQueryScriptSharpV2.jQueryUtil.select('input,select,textarea', container).attr('disabled', ((disable) ? 'disabled' : null));
}
js.com.cs.v4.Util.GeneralUtil.alert = function js_com_cs_v4_Util_GeneralUtil$alert(obj) {
    /// <param name="obj" type="Object">
    /// </param>
    alert(obj);
}
js.com.cs.v4.Util.GeneralUtil.getElementAsMyElement = function js_com_cs_v4_Util_GeneralUtil$getElementAsMyElement(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <returns type="js.com.cs.v4.Controls.Common.MyElement"></returns>
    if (Type.canCast(element, js.com.cs.v4.Controls.Common.MyElement)) {
        return element;
    }
    else {
        var elem = new js.com.cs.v4.Controls.Common.MyElement(element);
        if (!elem.get_jQueryElement().length) {
            return null;
        }
        else {
            return elem;
        }
    }
}
js.com.cs.v4.Util.GeneralUtil.invokeMethod = function js_com_cs_v4_Util_GeneralUtil$invokeMethod(obj, methodName, parameters) {
    /// <param name="obj" type="Object">
    /// </param>
    /// <param name="methodName" type="String">
    /// </param>
    /// <param name="parameters" type="Array" elementType="Object">
    /// </param>
    /// <returns type="Object"></returns>
    if (ss.isNullOrUndefined(parameters) || !parameters.length) {
        return obj[methodName]();
    }
    else if (parameters.length === 1) {
        return obj[methodName](parameters[0]);
    }
    else if (parameters.length === 2) {
        return obj[methodName](parameters[0], parameters[1]);
    }
    else if (parameters.length === 3) {
        return obj[methodName](parameters[0], parameters[1], parameters[2]);
    }
    else if (parameters.length === 4) {
        return obj[methodName](parameters[0], parameters[1], parameters[2], parameters[3]);
    }
    else if (parameters.length === 5) {
        return obj[methodName](parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]);
    }
    else if (parameters.length === 6) {
        return obj[methodName](parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5]);
    }
    else if (parameters.length === 7) {
        return obj[methodName](parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6]);
    }
    else if (parameters.length === 8) {
        return obj[methodName](parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7]);
    }
    else if (parameters.length === 9) {
        return obj[methodName](parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8]);
    }
    else {
        throw new Error('Not yet implemented with ' + parameters.length + ' parameters');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.GoogleAnalyticsUtil

js.com.cs.v4.Util.GoogleAnalyticsUtil = function js_com_cs_v4_Util_GoogleAnalyticsUtil() {
}
js.com.cs.v4.Util.GoogleAnalyticsUtil.trackPageView = function js_com_cs_v4_Util_GoogleAnalyticsUtil$trackPageView(synchronous, opt_pageURL, trackerVarName) {
    /// <param name="synchronous" type="Boolean">
    /// </param>
    /// <param name="opt_pageURL" type="String">
    /// (Optional) The URL to track
    /// </param>
    /// <param name="trackerVarName" type="String">
    /// Tracker var name, Defaults to '_gaq' if async and 'pageTracker' if sync.  Override this to whatever you set it to
    /// </param>
    if (synchronous) {
        if (ss.isNullOrUndefined(trackerVarName)) {
            trackerVarName = 'pageTracker';
        }
        var pageTracker = eval(trackerVarName);
        var parameters = [];
        if (!ss.isNullOrUndefined(opt_pageURL)) {
            parameters[0] = opt_pageURL;
        }
        pageTracker._trackPageview(parameters);
    }
    else {
        if (ss.isNullOrUndefined(trackerVarName)) {
            trackerVarName = '_gaq';
        }
        var gaq = eval(trackerVarName);
        var parameters = [];
        if (!ss.isNullOrUndefined(opt_pageURL)) {
            parameters[0] = '_trackPageview';
            parameters[1] = opt_pageURL;
        }
        gaq.push(parameters);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.jQueryPluginsUtil

js.com.cs.v4.Util.jQueryPluginsUtil = function js_com_cs_v4_Util_jQueryPluginsUtil() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.jQueryUIUtil

js.com.cs.v4.Util.jQueryUIUtil = function js_com_cs_v4_Util_jQueryUIUtil() {
}
js.com.cs.v4.Util.jQueryUIUtil.getDialogIFrame = function js_com_cs_v4_Util_jQueryUIUtil$getDialogIFrame(url, cssClass) {
    /// <param name="url" type="String">
    /// </param>
    /// <param name="cssClass" type="String">
    /// </param>
    /// <returns type="jQuery"></returns>
    var jIFrame = js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<iframe allowtransparency='true' src='" + url + "' class='" + cssClass + "' frameborder='0' />", window.top.document);
    return jIFrame;
}
js.com.cs.v4.Util.jQueryUIUtil.dialogOpenIFrame = function js_com_cs_v4_Util_jQueryUIUtil$dialogOpenIFrame(url, cssClass, opts, openImmediately) {
    /// <param name="url" type="String">
    /// </param>
    /// <param name="cssClass" type="String">
    /// </param>
    /// <param name="opts" type="js.com.JQueryScriptSharpV2._DialogOptions">
    /// </param>
    /// <param name="openImmediately" type="Boolean">
    /// </param>
    /// <returns type="js.com.cs.v4.UI.JQuery.JQueryDialog"></returns>
    if (opts == null) {
        opts = {};
    }
    var jIFrame = js.com.cs.v4.Util.jQueryUIUtil.getDialogIFrame(url, cssClass);
    var diag = new js.com.cs.v4.UI.JQuery.JQueryDialog(jIFrame, openImmediately, opts);
    return diag;
}
js.com.cs.v4.Util.jQueryUIUtil.dialogResize = function js_com_cs_v4_Util_jQueryUIUtil$dialogResize(dialogElement, width, height, updateIFrameHeightIfAny) {
    /// <summary>
    /// Resize a dialog box and center it on stage
    /// </summary>
    /// <param name="dialogElement" type="jQuery">
    /// Dialog element ('.ui-dialog')
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// Required width
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// Required height
    /// </param>
    /// <param name="updateIFrameHeightIfAny" type="Boolean">
    /// If there is an iframe in the dialog, it will update the height to the new height less title height
    /// </param>
    if (ss.isNullOrUndefined(updateIFrameHeightIfAny)) {
        updateIFrameHeightIfAny = true;
    }
    var divDialog = new js.com.cs.v4.Controls.Common.MyDivElement(dialogElement);
    divDialog.setStyle('width', width + 'px !important');
    divDialog.setStyle('height', height + 'px !important');
    if (updateIFrameHeightIfAny) {
        var jIFrame = js.com.JQueryScriptSharpV2.jQueryUtil.select('iframe', dialogElement);
        if (jIFrame.length > 0) {
            var jDialogTitleBar = js.com.JQueryScriptSharpV2.jQueryUtil.select('.ui-dialog-titlebar', dialogElement);
            var iFrameHeight = height;
            if (jDialogTitleBar.length > 0) {
                iFrameHeight -= jDialogTitleBar.outerHeight();
            }
            var myIframe = new js.com.cs.v4.Controls.Common.MyElement(jIFrame);
            myIframe.setStyle('height', iFrameHeight + 'px !important');
        }
    }
}
js.com.cs.v4.Util.jQueryUIUtil.dialogResizeAndCenter = function js_com_cs_v4_Util_jQueryUIUtil$dialogResizeAndCenter(dialogElement, width, height, updateIFrameHeightIfAny) {
    /// <param name="dialogElement" type="jQuery">
    /// </param>
    /// <param name="width" type="Number" integer="true">
    /// </param>
    /// <param name="height" type="Number" integer="true">
    /// </param>
    /// <param name="updateIFrameHeightIfAny" type="Boolean">
    /// </param>
    js.com.cs.v4.Util.jQueryUIUtil.dialogResize(dialogElement, width, height, updateIFrameHeightIfAny);
    js.com.cs.v4.Util.jQueryUIUtil.dialogCenterOnViewport(dialogElement);
}
js.com.cs.v4.Util.jQueryUIUtil.dialogCenterOnViewport = function js_com_cs_v4_Util_jQueryUIUtil$dialogCenterOnViewport(dialogElement) {
    /// <param name="dialogElement" type="jQuery">
    /// </param>
    var divDialog = new js.com.cs.v4.Controls.Common.MyDivElement(dialogElement);
    var vh = js.com.cs.v4.Util.WindowUtil.getViewportHeight();
    var vw = js.com.cs.v4.Util.WindowUtil.getViewportWidth();
    var l = Math.round((vw - dialogElement.width()) / 2);
    var t = Math.round((vh - dialogElement.height()) / 2);
    divDialog.get_jQueryElement().css('left', l);
    divDialog.get_jQueryElement().css('top', t);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util._jQueryUploadifyInitParams

js.com.cs.v4.Util._jQueryUploadifyInitParams = function js_com_cs_v4_Util__jQueryUploadifyInitParams() {
    /// <field name="settings" type="js.com.JQueryScriptSharpV2._UploadifySettings">
    /// </field>
    /// <field name="fileUpload" type="js.com.cs.v4.Controls.Form.MyFileUpload">
    /// </field>
}
js.com.cs.v4.Util._jQueryUploadifyInitParams.prototype = {
    settings: null,
    fileUpload: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.jQueryUploadifyUtil

js.com.cs.v4.Util.jQueryUploadifyUtil = function js_com_cs_v4_Util_jQueryUploadifyUtil() {
    /// <field name="_iniT_PARAMS" type="Array" elementType="_jQueryUploadifyInitParams" static="true">
    /// </field>
}
js.com.cs.v4.Util.jQueryUploadifyUtil._initUploadify = function js_com_cs_v4_Util_jQueryUploadifyUtil$_initUploadify(settings, fileUploadID) {
    /// <param name="settings" type="js.com.JQueryScriptSharpV2._UploadifySettings">
    /// </param>
    /// <param name="fileUploadID" type="String">
    /// </param>
    if (ss.isNullOrUndefined(settings.cancelImg)) {
        settings.cancelImg = js.com.JQueryScriptSharpV2._UploadifySettings.defaulT_CANCEL_IMAGE;
    }
    var upload = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(fileUploadID);
    if (!upload.length) {
        alert("File upload with ID '" + fileUploadID + "' not in DOM");
    }
    else {
        upload.uploadify(settings);
    }
}
js.com.cs.v4.Util.jQueryUploadifyUtil.initUploadify = function js_com_cs_v4_Util_jQueryUploadifyUtil$initUploadify(settings, fileUploadID) {
    /// <param name="settings" type="js.com.JQueryScriptSharpV2._UploadifySettings">
    /// </param>
    /// <param name="fileUploadID" type="String">
    /// </param>
    var ok = true;
    if (ok) {
        js.com.cs.v4.Util.jQueryUploadifyUtil._initUploadify(settings, fileUploadID);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.jQueryPrettyPhotoUtil

js.com.cs.v4.Util.jQueryPrettyPhotoUtil = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil() {
    /// <field name="__onChangeItem" type="Action" static="true">
    /// </field>
    /// <field name="__onClose" type="Action" static="true">
    /// </field>
    /// <field name="_TEMP_SETTINGS" type="js.com.JQueryScriptSharpV2._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.v4.Util.jQueryPrettyPhotoUtil.add_onChangeItem = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$add_onChangeItem(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem = ss.Delegate.combine(js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem, value);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.remove_onChangeItem = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$remove_onChangeItem(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem = ss.Delegate.remove(js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem, value);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.add_onClose = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$add_onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose = ss.Delegate.combine(js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose, value);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.remove_onClose = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$remove_onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose = ss.Delegate.remove(js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose, value);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$get__prettyPhotoInstance() {
    /// <value type="js.com.JQueryScriptSharpV2._PrettyPhoto"></value>
    return jQuery.prettyPhoto;
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.open = function js_com_cs_v4_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.v4.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().open(item, title, desc);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.openInlineContent = function js_com_cs_v4_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.v4.Controls.Common.MyElement">
    /// </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.v4.Util.jQueryPrettyPhotoUtil._INIT_INLINE_CONTENT_GC) {
        js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INIT_INLINE_CONTENT_GC = true;
        js.com.cs.v4.Util.jQueryPrettyPhotoUtil.add_onChangeItem(js.com.cs.v4.Util.jQueryPrettyPhotoUtil._jQueryPrettyPhotoUtil_OnChangeItem);
    }
    var divContainer = new js.com.cs.v4.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.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_COUNT);
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_COUNT++;
    document.body.appendChild(divContainer.get_element());
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.open('#' + divContainer.get_id(), title, desc);
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS[js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS.length] = divContainer.get_id();
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._clearInlineContentContainers = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$_clearInlineContentContainers() {
    var a = js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS;
    while (a.length > 0) {
        var itemID = a.pop();
        var jQueryItem = js.com.JQueryScriptSharpV2.jQueryUtil.selectById(itemID);
        jQueryItem.remove();
    }
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._jQueryPrettyPhotoUtil_OnChangeItem = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$_jQueryPrettyPhotoUtil_OnChangeItem() {
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil._clearInlineContentContainers();
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.nextPage = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$nextPage() {
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().changePage('next');
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.prevPage = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$prevPage() {
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().changePage('previous');
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.close = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$close() {
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil.get__prettyPhotoInstance().close();
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._initPrettyPhoto = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$_initPrettyPhoto() {
    js.com.JQueryScriptSharpV2.jQueryUtil.select("a[rel^='prettyPhoto']").prettyPhoto(js.com.cs.v4.Util.jQueryPrettyPhotoUtil._TEMP_SETTINGS);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._prettyPhotoChange = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$_prettyPhotoChange() {
    if (js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem != null) {
        js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem();
    }
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._prettyPhotoClose = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$_prettyPhotoClose() {
    if (js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose != null) {
        js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose();
    }
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.initPrettyPhoto = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$initPrettyPhoto(settings) {
    /// <param name="settings" type="js.com.JQueryScriptSharpV2._PrettyPhotoSettings">
    /// </param>
    if (ss.isNullOrUndefined(settings)) {
        settings = {};
    }
    if (ss.isNullOrUndefined(settings.callback)) {
        settings.callback = js.com.cs.v4.Util.jQueryPrettyPhotoUtil._prettyPhotoClose;
    }
    if (ss.isNullOrUndefined(settings.changepicturecallback)) {
        settings.changepicturecallback = js.com.cs.v4.Util.jQueryPrettyPhotoUtil._prettyPhotoChange;
    }
    js.com.cs.v4.Util.jQueryPrettyPhotoUtil._TEMP_SETTINGS = settings;
    js.com.JQueryScriptSharpV2.jQueryUtil.addOnReadyCallback(js.com.cs.v4.Util.jQueryPrettyPhotoUtil._initPrettyPhoto);
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.getPrettyPhotoLink = function js_com_cs_v4_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.v4.Classes.URL.QueryString();
    if (!js.com.cs.v4.Util.FileUtil.isImage(itemURL)) {
        qs.set_item('width', ((!width || ss.isNullOrUndefined(width)) ? '80%' : width.toString()));
        qs.set_item('height', ((!height || ss.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.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.jW_PLAYER_PATH;
        itemURL = swfPath;
    }
    var url = itemURL;
    if (qs.get_count() > 0) {
        url += '?' + qs;
    }
    return url;
}
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.getPrettyPhotoSWFLink = function js_com_cs_v4_Util_jQueryPrettyPhotoUtil$getPrettyPhotoSWFLink(swfURL, flashVars, width, height) {
    /// <param name="swfURL" type="String">
    /// </param>
    /// <param name="flashVars" type="js.com.cs.v4.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.v4.Classes.URL.QueryString();
    qs.set_item('width', ((!width || ss.isNullOrUndefined(width)) ? '80%' : width.toString()));
    qs.set_item('height', ((!height || ss.isNullOrUndefined(height)) ? '80%' : height.toString()));
    if (flashVars != null) {
        qs.set_item('flashvars', flashVars.toString());
    }
    var url = swfURL + '?' + qs.toString();
    return url;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.jQueryShadowBoxUtil

js.com.cs.v4.Util.jQueryShadowBoxUtil = function js_com_cs_v4_Util_jQueryShadowBoxUtil() {
    /// <field name="___onOpen" type="js.com.JQueryScriptSharpV2._ShadowBoxElementStoppableHandler" static="true">
    /// </field>
    /// <field name="___onClose" type="js.com.JQueryScriptSharpV2._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="___onFinish" type="js.com.JQueryScriptSharpV2._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="___onChange" type="js.com.JQueryScriptSharpV2._ShadowBoxElementHandler" static="true">
    /// </field>
    /// <field name="_onOpenFinishHandlerToCall" type="js.com.JQueryScriptSharpV2._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.v4.Util.jQueryShadowBoxUtil.add__onOpen = function js_com_cs_v4_Util_jQueryShadowBoxUtil$add__onOpen(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen = ss.Delegate.combine(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onOpen = function js_com_cs_v4_Util_jQueryShadowBoxUtil$remove__onOpen(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen = ss.Delegate.remove(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onClose = function js_com_cs_v4_Util_jQueryShadowBoxUtil$add__onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose = ss.Delegate.combine(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onClose = function js_com_cs_v4_Util_jQueryShadowBoxUtil$remove__onClose(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose = ss.Delegate.remove(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onFinish = function js_com_cs_v4_Util_jQueryShadowBoxUtil$add__onFinish(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish = ss.Delegate.combine(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onFinish = function js_com_cs_v4_Util_jQueryShadowBoxUtil$remove__onFinish(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish = ss.Delegate.remove(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onChange = function js_com_cs_v4_Util_jQueryShadowBoxUtil$add__onChange(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange = ss.Delegate.combine(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onChange = function js_com_cs_v4_Util_jQueryShadowBoxUtil$remove__onChange(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange = ss.Delegate.remove(js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange, value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add_onOpen = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onOpen(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove_onOpen = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onOpen(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add_onFinish = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onFinish(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove_onFinish = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onFinish(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add_onClose = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onClose(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove_onClose = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onClose(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.add_onChange = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.add__onChange(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.remove_onChange = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil._initHandlers();
    js.com.cs.v4.Util.jQueryShadowBoxUtil.remove__onChange(value);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._onClose = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_onClose(options) {
    /// <param name="options" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
    /// </param>
    if (js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose != null) {
        js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose(options);
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpen = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_onOpen(options) {
    /// <param name="options" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen != null) {
        return js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen(options);
    }
    return true;
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._onChange = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_onChange(options) {
    /// <param name="options" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
    /// </param>
    if (js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange != null) {
        js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange(options);
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._onFinish = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_onFinish(options) {
    /// <param name="options" type="js.com.JQueryScriptSharpV2._ShadowBoxObjectParams">
    /// </param>
    if (js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall != null) {
        js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall(options);
    }
    if (js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish != null) {
        js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish(options);
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._initHandlers = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_initHandlers() {
    if (!js.com.cs.v4.Util.jQueryShadowBoxUtil._HANDLERS_INIT) {
        Shadowbox.options.onOpen = js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpen;
        Shadowbox.options.onFinish = js.com.cs.v4.Util.jQueryShadowBoxUtil._onFinish;
        Shadowbox.options.onClose = js.com.cs.v4.Util.jQueryShadowBoxUtil._onClose;
        Shadowbox.options.onOpen = js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpen;
        js.com.cs.v4.Util.jQueryShadowBoxUtil._HANDLERS_INIT = true;
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.getRelTagContent = function js_com_cs_v4_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 (!ss.isNullOrUndefined(width)) {
        s += ';width=' + width;
    }
    if (!ss.isNullOrUndefined(height)) {
        s += ';height=' + height;
    }
    return s;
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.updateRelTag = function js_com_cs_v4_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.v4.Util.jQueryShadowBoxUtil.getRelTagContent(gallery, width, height));
    if (!String.isNullOrEmpty(title)) {
        elem.title = title;
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.openLink = function js_com_cs_v4_Util_jQueryShadowBoxUtil$openLink(content, title, gallery, player, width, height, OnOpenFinishCallback) {
    /// <param name="content" type="Object">
    /// String / Element
    /// </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.JQueryScriptSharpV2._ShadowBoxElementHandler">
    /// </param>
    js.com.cs.v4.Util.jQueryShadowBoxUtil._initHandlers();
    var elem = null;
    var divElemContainer = null;
    if (Type.canCast(content, js.com.cs.v4.Controls.Common.MyElement)) {
        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.v4.Controls.Common.MyElement((content).get(0));
        }
    }
    else if (Type.canCast(content, Object)) {
        elem = new js.com.cs.v4.Controls.Common.MyElement(content);
    }
    if (elem != null) {
        var id = 'shadowbox-inline-content-' + js.com.cs.v4.Util.jQueryShadowBoxUtil._OPEN_LINK_COUNT;
        if (elem.get_parent() == null) {
            divElemContainer = new js.com.cs.v4.Controls.Common.MyDivElement();
            divElemContainer.set_id(id);
            divElemContainer.appendChild(elem);
            document.body.appendChild(divElemContainer.get_element());
        }
        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('#')) {
            p.player = 'inline';
        }
        else {
            p.player = Shadowbox.getPlayer(content);
        }
    }
    js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall = null;
    if (!ss.isNullOrUndefined(OnOpenFinishCallback)) {
        js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall = OnOpenFinishCallback;
    }
    Shadowbox.open(p);
    if (divElemContainer != null) {
        divElemContainer.get_parent().removeChild(divElemContainer);
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._jQueryShadowBoxUtil_OnFinish = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_jQueryShadowBoxUtil_OnFinish(elemOptions) {
    /// <param name="elemOptions" type="js.com.JQueryScriptSharpV2._ShadowBoxOptions">
    /// </param>
    alert('FINISH');
}
js.com.cs.v4.Util.jQueryShadowBoxUtil._jQueryShadowBoxUtil_OnChange = function js_com_cs_v4_Util_jQueryShadowBoxUtil$_jQueryShadowBoxUtil_OnChange(elemOptions) {
    /// <param name="elemOptions" type="js.com.JQueryScriptSharpV2._ShadowBoxOptions">
    /// </param>
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.initShadowBox = function js_com_cs_v4_Util_jQueryShadowBoxUtil$initShadowBox(options, callback) {
    /// <param name="options" type="js.com.JQueryScriptSharpV2._ShadowBoxOptions">
    /// </param>
    /// <param name="callback" type="EventHandler">
    /// </param>
    if (!js.com.cs.v4.Util.jQueryShadowBoxUtil._SHADOWBOX_INIT) {
        js.com.cs.v4.Util.jQueryShadowBoxUtil._SHADOWBOX_INIT = true;
        js.com.cs.v4.Util.jQueryShadowBoxUtil._initHandlers();
        Shadowbox.init(options, callback);
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.get_shadowBoxPlayerElement = function js_com_cs_v4_Util_jQueryShadowBoxUtil$get_shadowBoxPlayerElement() {
    /// <summary>
    /// The element in the middle
    /// </summary>
    /// <value type="js.com.cs.v4.Controls.Common.MyDivElement"></value>
    var elem = js.com.JQueryScriptSharpV2.jQueryUtil.selectById('sb-player');
    if (elem.length > 0) {
        return new js.com.cs.v4.Controls.Common.MyDivElement(elem);
    }
    else {
        return null;
    }
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.showShadowBoxLoading = function js_com_cs_v4_Util_jQueryShadowBoxUtil$showShadowBoxLoading(text, durationMS) {
    /// <param name="text" type="String">
    /// </param>
    /// <param name="durationMS" type="Number" integer="true">
    /// </param>
    var jqueryLoading = js.com.JQueryScriptSharpV2.jQueryUtil.select('#sb-loading');
    var jqueryLoadingText = js.com.JQueryScriptSharpV2.jQueryUtil.select('#sb-loading-inner span');
    jqueryLoadingText.text(text);
    jqueryLoading.fadeIn(durationMS);
}
js.com.cs.v4.Util.jQueryShadowBoxUtil.hideShadowBoxLoading = function js_com_cs_v4_Util_jQueryShadowBoxUtil$hideShadowBoxLoading(durationMS) {
    /// <param name="durationMS" type="Number" integer="true">
    /// </param>
    var jqueryLoading = js.com.JQueryScriptSharpV2.jQueryUtil.select('#sb-loading');
    jqueryLoading.fadeOut(durationMS);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.KeyboardUtil

js.com.cs.v4.Util.KeyboardUtil = function js_com_cs_v4_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.v4.Util.KeyboardUtil._domDoc_onKeyPressWithEvent = function js_com_cs_v4_Util_KeyboardUtil$_domDoc_onKeyPressWithEvent(e) {
    /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
    /// </param>
    for (var i = 0; i < js.com.cs.v4.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS.length; i++) {
        var shortcut = js.com.cs.v4.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) && (!requiresAlt || e.altKey) && (!requiresShift || e.shiftKey)) {
            e.preventDefault();
            break;
        }
    }
}
js.com.cs.v4.Util.KeyboardUtil.disableDefaultBrowserShortcut = function js_com_cs_v4_Util_KeyboardUtil$disableDefaultBrowserShortcut(shortcutKeys) {
    /// <summary>
    /// Disable  browser shortcut default
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    if (!js.com.cs.v4.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED) {
        var domDoc = new js.com.cs.v4.Controls.Common.MyElement(document.documentElement);
        domDoc.add_onKeyPress(js.com.cs.v4.Util.KeyboardUtil._domDoc_onKeyPressWithEvent);
        js.com.cs.v4.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED = true;
    }
    js.com.cs.v4.Util.KeyboardUtil.enableDefaultBrowserShortcut(shortcutKeys);
    js.com.cs.v4.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS[js.com.cs.v4.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS.length] = shortcutKeys.toLowerCase();
}
js.com.cs.v4.Util.KeyboardUtil.enableDefaultBrowserShortcut = function js_com_cs_v4_Util_KeyboardUtil$enableDefaultBrowserShortcut(shortcutKeys) {
    /// <summary>
    /// Re-enables a browser shortcut
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    js.com.cs.v4.Util.ArrayUtil.removeObjectsFromArray(js.com.cs.v4.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS, shortcutKeys);
}
js.com.cs.v4.Util.KeyboardUtil.addShortcutHandler = function js_com_cs_v4_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="Action">
    /// Handler to call
    /// </param>
    try {
        var s = shortcut;
        s.add(shortcutKeys, handler);
        js.com.cs.v4.Util.KeyboardUtil.disableDefaultBrowserShortcut(shortcutKeys);
    }
    catch (ex) {
        alert('Please include /_common/js/shortcuts/shortcut.js for shortcuts');
    }
}
js.com.cs.v4.Util.KeyboardUtil.removeShortcutHandler = function js_com_cs_v4_Util_KeyboardUtil$removeShortcutHandler(shortcutKeys) {
    /// <summary>
    /// Removes a previously added shortcut
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    try {
        var s = shortcut;
        s.remove(shortcutKeys);
        js.com.cs.v4.Util.KeyboardUtil.enableDefaultBrowserShortcut(shortcutKeys);
    }
    catch (ex) {
        alert('Please include /_common/js/shortcuts/shortcut.js for shortcuts');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.MouseUtil

js.com.cs.v4.Util.MouseUtil = function js_com_cs_v4_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.v4.Util.MouseUtil.get_mouseX = function js_com_cs_v4_Util_MouseUtil$get_mouseX() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v4.Util.MouseUtil.init();
    return js.com.cs.v4.Util.MouseUtil._mouseX;
}
js.com.cs.v4.Util.MouseUtil.get_mouseY = function js_com_cs_v4_Util_MouseUtil$get_mouseY() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v4.Util.MouseUtil.init();
    return js.com.cs.v4.Util.MouseUtil._mouseY;
}
js.com.cs.v4.Util.MouseUtil.get_mouseViewportX = function js_com_cs_v4_Util_MouseUtil$get_mouseViewportX() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v4.Util.MouseUtil.init();
    return js.com.cs.v4.Util.MouseUtil._mouseViewportX;
}
js.com.cs.v4.Util.MouseUtil.get_mouseViewportY = function js_com_cs_v4_Util_MouseUtil$get_mouseViewportY() {
    /// <value type="Number" integer="true"></value>
    js.com.cs.v4.Util.MouseUtil.init();
    return js.com.cs.v4.Util.MouseUtil._mouseViewportY;
}
js.com.cs.v4.Util.MouseUtil._checkMousePos = function js_com_cs_v4_Util_MouseUtil$_checkMousePos() {
    alert(js.com.cs.v4.Util.MouseUtil._mouseX + ', ' + js.com.cs.v4.Util.MouseUtil._mouseY + ' :: ' + js.com.cs.v4.Util.MouseUtil._mouseViewportX + ', ' + js.com.cs.v4.Util.MouseUtil._mouseViewportY);
}
js.com.cs.v4.Util.MouseUtil.init = function js_com_cs_v4_Util_MouseUtil$init() {
    if (!js.com.cs.v4.Util.MouseUtil._INIT) {
        js.com.cs.v4.Util.DOMUtil.get_document().add_onMouseMove(js.com.cs.v4.Util.MouseUtil._DOCUMENT_onMouseMove);
        js.com.cs.v4.Util.MouseUtil._INIT = true;
    }
}
js.com.cs.v4.Util.MouseUtil._windowUtil_onMouseMove = function js_com_cs_v4_Util_MouseUtil$_windowUtil_onMouseMove() {
}
js.com.cs.v4.Util.MouseUtil._DOCUMENT_onMouseMove = function js_com_cs_v4_Util_MouseUtil$_DOCUMENT_onMouseMove(e) {
    /// <param name="e" type="js.com.JQueryScriptSharpV2.JQueryEvent">
    /// </param>
    js.com.cs.v4.Util.MouseUtil._mouseX = e.pageX;
    js.com.cs.v4.Util.MouseUtil._mouseY = e.pageY;
    js.com.cs.v4.Util.MouseUtil._mouseViewportX = js.com.cs.v4.Util.MouseUtil._mouseX - js.com.cs.v4.Util.WindowUtil.getScrollLeft();
    js.com.cs.v4.Util.MouseUtil._mouseViewportY = js.com.cs.v4.Util.MouseUtil._mouseY - js.com.cs.v4.Util.WindowUtil.getScrollTop();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.NumberUtil

js.com.cs.v4.Util.NumberUtil = function js_com_cs_v4_Util_NumberUtil() {
}
js.com.cs.v4.Util.NumberUtil.getPrice = function js_com_cs_v4_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 (ss.isNullOrUndefined(decimalPlaces)) {
        decimalPlaces = 2;
    }
    if (ss.isNullOrUndefined(currency)) {
        currency = '&euro;';
    }
    return currency + price.toFixed(decimalPlaces);
}
js.com.cs.v4.Util.NumberUtil.getNumberFromString = function js_com_cs_v4_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.v4.Util.NumberUtil.isDigit(currChar)) {
            str = str.substring(i, str.length);
            return Number.parse(str);
        }
    }
    return 0;
}
js.com.cs.v4.Util.NumberUtil.bitwiseComparison = function js_com_cs_v4_Util_NumberUtil$bitwiseComparison(value, flag) {
    /// <param name="value" type="ss.Enum">
    /// </param>
    /// <param name="flag" type="ss.Enum">
    /// </param>
    /// <returns type="Boolean"></returns>
    var nValue = value;
    var nCompareBit = flag;
    if ((nValue & nCompareBit) === nCompareBit) {
        return true;
    }
    else {
        return false;
    }
}
js.com.cs.v4.Util.NumberUtil.isDigit = function js_com_cs_v4_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.v4.Util.NumberUtil.parseNumber = function js_com_cs_v4_Util_NumberUtil$parseNumber(value, nullValue) {
    /// <param name="value" type="String">
    /// </param>
    /// <param name="nullValue" type="Number">
    /// </param>
    /// <returns type="Number"></returns>
    var n = Number.parse(value);
    if (!isNaN(n)) {
        return n;
    }
    else {
        return nullValue;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.PageUtil

js.com.cs.v4.Util.PageUtil = function js_com_cs_v4_Util_PageUtil() {
}
js.com.cs.v4.Util.PageUtil.getQuerystring = function js_com_cs_v4_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.v4.Classes.URL.QueryString(null);
    var val = qs.get_item(key);
    if (String.isNullOrEmpty(val)) {
        val = defaultValue;
    }
    return val;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.RandomUtil

js.com.cs.v4.Util.RandomUtil = function js_com_cs_v4_Util_RandomUtil() {
}
js.com.cs.v4.Util.RandomUtil.getRandomBool = function js_com_cs_v4_Util_RandomUtil$getRandomBool() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v4.Util.RandomUtil.getRandomNumber() < 0.5;
}
js.com.cs.v4.Util.RandomUtil.getRandomNumber = function js_com_cs_v4_Util_RandomUtil$getRandomNumber(from, to) {
    /// <param name="from" type="Number">
    /// </param>
    /// <param name="to" type="Number">
    /// </param>
    /// <returns type="Number"></returns>
    if (ss.isNullOrUndefined(from) && ss.isNullOrUndefined(to)) {
        return Math.random();
    }
    else if (!ss.isNullOrUndefined(from) && ss.isNullOrUndefined(to)) {
        to = from;
        from = 0;
    }
    var range = to - from;
    var n = Math.random() * range;
    return n + from;
}
js.com.cs.v4.Util.RandomUtil.getRandomInteger = function js_com_cs_v4_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.v4.Util.RandomUtil.getRandomNumber())) + from;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.ResizeUtil

js.com.cs.v4.Util.ResizeUtil = function js_com_cs_v4_Util_ResizeUtil() {
}
js.com.cs.v4.Util.ResizeUtil.fitInBox = function js_com_cs_v4_Util_ResizeUtil$fitInBox(elem, width, height) {
    /// <param name="elem" type="js.com.cs.v4.Controls.Common.MyElement">
    /// </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 size = js.com.cs.v4.Util.ResizeUtil.fitDimensions(new js.com.cs.v4.Classes.Geom.Point(origWidth, origHeight), new js.com.cs.v4.Classes.Geom.Point(width, height), false);
    elem.get_jQueryElement().width(parseInt(size.x));
    elem.get_jQueryElement().height(parseInt(size.y));
}
js.com.cs.v4.Util.ResizeUtil.fitDimensions = function js_com_cs_v4_Util_ResizeUtil$fitDimensions(size, fitIntoSize, scaleUpIfSmaller) {
    /// <param name="size" type="js.com.cs.v4.Classes.Geom.Point">
    /// </param>
    /// <param name="fitIntoSize" type="js.com.cs.v4.Classes.Geom.Point">
    /// </param>
    /// <param name="scaleUpIfSmaller" type="Boolean">
    /// </param>
    /// <returns type="js.com.cs.v4.Classes.Geom.Point"></returns>
    var itemWidth = size.x;
    var itemHeight = size.y;
    var width = fitIntoSize.x;
    var height = fitIntoSize.y;
    var newPt = new js.com.cs.v4.Classes.Geom.Point(size.x, size.y);
    if (scaleUpIfSmaller || (itemWidth > width || itemHeight > height)) {
        var widthRatio = width / itemWidth;
        newPt.x = width;
        newPt.y = itemHeight * widthRatio;
        if (newPt.y > height) {
            var heightRatio = height / itemHeight;
            newPt.y = height;
            newPt.x = itemWidth * heightRatio;
        }
    }
    return newPt;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.SortUtil

js.com.cs.v4.Util.SortUtil = function js_com_cs_v4_Util_SortUtil() {
}
js.com.cs.v4.Util.SortUtil.sortStringAscending = function js_com_cs_v4_Util_SortUtil$sortStringAscending(a, b) {
    /// <param name="a" type="Object">
    /// </param>
    /// <param name="b" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (!(Type.canCast(a, String))) {
        throw new Error(a + ' is not a string');
    }
    if (!(Type.canCast(b, String))) {
        throw new Error(b + ' is not a string');
    }
    return String.compare(a, b, true);
}
js.com.cs.v4.Util.SortUtil.sortStringDescending = function js_com_cs_v4_Util_SortUtil$sortStringDescending(a, b) {
    /// <param name="a" type="Object">
    /// </param>
    /// <param name="b" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (!(Type.canCast(a, String))) {
        throw new Error(a + ' is not a string');
    }
    if (!(Type.canCast(b, String))) {
        throw new Error(b + ' is not a string');
    }
    return -String.compare(a, b, true);
}
js.com.cs.v4.Util.SortUtil.sortOptionElementsAscending = function js_com_cs_v4_Util_SortUtil$sortOptionElementsAscending(a, b) {
    /// <param name="a" type="Object">
    /// </param>
    /// <param name="b" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var optA = a;
    var optB = b;
    return js.com.cs.v4.Util.SortUtil.sortStringAscending(optA.text, optB.text);
}
js.com.cs.v4.Util.SortUtil.boolComparerDescending = function js_com_cs_v4_Util_SortUtil$boolComparerDescending(a, b) {
    /// <param name="a" type="Object">
    /// </param>
    /// <param name="b" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return -js.com.cs.v4.Util.SortUtil.boolComparerAscending(a, b);
}
js.com.cs.v4.Util.SortUtil.numberComparerAscending = function js_com_cs_v4_Util_SortUtil$numberComparerAscending(a, b) {
    /// <param name="a" type="Number">
    /// </param>
    /// <param name="b" type="Number">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var optA = a;
    var optB = b;
    if (ss.isNullOrUndefined(a) && ss.isNullOrUndefined(b) || optA === optB) {
        return 0;
    }
    if (ss.isNullOrUndefined(a) || ss.isNullOrUndefined(b)) {
        return -1;
    }
    if (optA > optB) {
        return 1;
    }
    else if (optA < optB) {
        return -1;
    }
    else {
        return 0;
    }
}
js.com.cs.v4.Util.SortUtil.boolComparerAscending = function js_com_cs_v4_Util_SortUtil$boolComparerAscending(a, b) {
    /// <param name="a" type="Object">
    /// </param>
    /// <param name="b" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var optA = a;
    var optB = b;
    if (optA === optB) {
        return 0;
    }
    if (optA) {
        return -1;
    }
    return 1;
}
js.com.cs.v4.Util.SortUtil.sortOptionElementsDescending = function js_com_cs_v4_Util_SortUtil$sortOptionElementsDescending(a, b) {
    /// <param name="a" type="Object">
    /// </param>
    /// <param name="b" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var optA = a;
    var optB = b;
    return js.com.cs.v4.Util.SortUtil.sortStringDescending(optA.text, optB.text);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.StringUtil

js.com.cs.v4.Util.StringUtil = function js_com_cs_v4_Util_StringUtil() {
}
js.com.cs.v4.Util.StringUtil.countWords = function js_com_cs_v4_Util_StringUtil$countWords(s) {
    /// <param name="s" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v4.Util.StringUtil.getWords(s).length;
}
js.com.cs.v4.Util.StringUtil.getWords = function js_com_cs_v4_Util_StringUtil$getWords(s) {
    /// <param name="s" type="String">
    /// </param>
    /// <returns type="Array" elementType="String"></returns>
    var y = s;
    var regExp = new RegExp('\\s', 'gim');
    var a = y.replace(regExp, ' ').split(' ');
    var words = new js.com.cs.v4.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.v4.Util.StringUtil.getWordIndex = function js_com_cs_v4_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.v4.Util.StringUtil.padNumber = function js_com_cs_v4_Util_StringUtil$padNumber(num, places, padCharacter, padLeft) {
    /// <param name="num" type="Number">
    /// </param>
    /// <param name="places" type="Number" integer="true">
    /// </param>
    /// <param name="padCharacter" type="String">
    /// </param>
    /// <param name="padLeft" type="Boolean">
    /// </param>
    /// <returns type="String"></returns>
    if (ss.isNullOrUndefined(padCharacter)) {
        padCharacter = '0';
    }
    if (ss.isNullOrUndefined(padLeft)) {
        padLeft = true;
    }
    var s = num.toString();
    var s2 = '';
    var dotIndex = s.indexOf('.');
    if (dotIndex !== -1) {
        s2 = s.substring(dotIndex, s.length);
        s = s.substring(0, dotIndex);
    }
    var remaining = Math.max(0, places - s.length);
    for (var i = 0; i < remaining; i++) {
        if (padLeft) {
            s = padCharacter + s;
        }
        else {
            s = s + padCharacter;
        }
    }
    return s + s2;
}
js.com.cs.v4.Util.StringUtil.formatTime = function js_com_cs_v4_Util_StringUtil$formatTime(min, sec) {
    /// <param name="min" type="Number" integer="true">
    /// </param>
    /// <param name="sec" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    min += Math.floor(sec / 60);
    sec = sec % 60;
    return js.com.cs.v4.Util.StringUtil.padNumber(min, 2, '0') + ':' + js.com.cs.v4.Util.StringUtil.padNumber(sec, 2, '0');
}
js.com.cs.v4.Util.StringUtil.formatNumber = function js_com_cs_v4_Util_StringUtil$formatNumber(num, decimalPlaces, thousandDelimiter) {
    /// <param name="num" type="Number">
    /// </param>
    /// <param name="decimalPlaces" type="Number" integer="true">
    /// </param>
    /// <param name="thousandDelimiter" type="String">
    /// </param>
    /// <returns type="String"></returns>
    var s = num.toFixed(decimalPlaces);
    if (!ss.isNullOrUndefined(thousandDelimiter)) {
        var startIndexOf = s.indexOf('.');
        if (startIndexOf === -1) {
            startIndexOf = s.length;
        }
        for (var i = startIndexOf - 3; i > 0; i -= 3) {
            s = s.insert(i, thousandDelimiter);
        }
    }
    return s;
}
js.com.cs.v4.Util.StringUtil.trim = function js_com_cs_v4_Util_StringUtil$trim(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="String"></returns>
    return jQuery.trim(str);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util._SwfObjectParams

js.com.cs.v4.Util._SwfObjectParams = function js_com_cs_v4_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.v4.Util._SwfObjectParams.prototype = {
    flashAttributes: null,
    flashParams: null,
    flashVars: null,
    expressInstallURL: '/_common/flash/v1/swfobject/2.1/expressInstall.swf'
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.SWFObjectUtil

js.com.cs.v4.Util.SWFObjectUtil = function js_com_cs_v4_Util_SWFObjectUtil() {
}
js.com.cs.v4.Util.SWFObjectUtil.initSWF = function js_com_cs_v4_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.v4.Util._SwfObjectParams">
    /// </param>
    /// <param name="onReady" type="Callback">
    /// </param>
    var swfObject = swfobject;
    if (ss.isNullOrUndefined(parameters)) {
        parameters = new js.com.cs.v4.Util._SwfObjectParams();
    }
    swfObject.embedSWF(flashURL, elementID, width, height, flashVersion, parameters.expressInstallURL, parameters.flashVars, parameters.flashParams, parameters.flashAttributes, onReady);
}
js.com.cs.v4.Util.SWFObjectUtil.hasFlashPlayerVersion = function js_com_cs_v4_Util_SWFObjectUtil$hasFlashPlayerVersion(version) {
    /// <param name="version" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var swfObject = swfobject;
    return swfObject.hasFlashPlayerVersion(version);
}
js.com.cs.v4.Util.SWFObjectUtil.getFlashMovieObject = function js_com_cs_v4_Util_SWFObjectUtil$getFlashMovieObject(movieName) {
    /// <param name="movieName" type="String">
    /// </param>
    /// <returns type="Object"></returns>
    
               
                    if (window.document[movieName]){
                        return window.document[movieName];
                    }
                    if (navigator.appName.indexOf("Microsoft Internet")==-1){
                        if (document.embeds && document.embeds[movieName])
                            return document.embeds[movieName];
                    }
                    else
                    {
                        return document.getElementById(movieName);
                    }
                ;
    return null;
}
js.com.cs.v4.Util.SWFObjectUtil.invokeFlashMethod = function js_com_cs_v4_Util_SWFObjectUtil$invokeFlashMethod(movieName, methodName, args) {
    /// <param name="movieName" type="String">
    /// </param>
    /// <param name="methodName" type="String">
    /// </param>
    /// <param name="args" type="Array" elementType="Object">
    /// </param>
    /// <returns type="Boolean"></returns>
    var flashMovie = js.com.cs.v4.Util.SWFObjectUtil.getFlashMovieObject(movieName);
    try {
        js.com.cs.v4.Util.GeneralUtil.invokeMethod(flashMovie, methodName, args);
        return true;
    }
    catch (ex) {
        return false;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.URLUtil

js.com.cs.v4.Util.URLUtil = function js_com_cs_v4_Util_URLUtil() {
}
js.com.cs.v4.Util.URLUtil.removeQueryString = function js_com_cs_v4_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.v4.Util.URLUtil.getQueryString = function js_com_cs_v4_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.v4.Util.OUTPUT_ERROR_MSG

js.com.cs.v4.Util.OUTPUT_ERROR_MSG = function js_com_cs_v4_Util_OUTPUT_ERROR_MSG() {
    /// <field name="errorMessage" type="String">
    /// </field>
}
js.com.cs.v4.Util.OUTPUT_ERROR_MSG.prototype = {
    errorMessage: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Util.Validation

js.com.cs.v4.Util.Validation = function js_com_cs_v4_Util_Validation() {
}
js.com.cs.v4.Util.Validation.containCharactersWhichAreNot = function js_com_cs_v4_Util_Validation$containCharactersWhichAreNot(str, allowedCharsPattern) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="allowedCharsPattern" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!ss.isNullOrUndefined(allowedCharsPattern)) {
        var r = new RegExp('[^' + allowedCharsPattern + ']+');
        return r.test(str);
    }
    return true;
}
js.com.cs.v4.Util.Validation.containOnlyCharacters = function js_com_cs_v4_Util_Validation$containOnlyCharacters(str, allowedCharsPattern) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="allowedCharsPattern" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return !js.com.cs.v4.Util.Validation.containCharactersWhichAreNot(str, allowedCharsPattern);
}
js.com.cs.v4.Util.Validation.isEmail = function js_com_cs_v4_Util_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.v4.Util.Validation.isWebsite = function js_com_cs_v4_Util_Validation$isWebsite(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var pattern = '^(https?://)?[a-zA-Z0-9.-_]+\\.[a-zA-Z]{2,7}(/.*)?$';
    var regEx = new RegExp(pattern);
    var ok = false;
    ok = regEx.test(str);
    return ok;
}
js.com.cs.v4.Util.Validation.isNumber = function js_com_cs_v4_Util_Validation$isNumber(str, parameters, outErrorMsg, itemTitle) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="outErrorMsg" type="js.com.cs.v4.Util.OUTPUT_ERROR_MSG">
    /// </param>
    /// <param name="itemTitle" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var ok = true;
    if (ss.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 (!ss.isNullOrUndefined(parameters) && (!ss.isNullOrUndefined(parameters.numFrom) || !ss.isNullOrUndefined(parameters.numTo))) {
            if (ss.isNullOrUndefined(parameters.numFrom)) {
                parameters.numFrom = Number.NEGATIVE_INFINITY;
            }
            if (ss.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 (!ss.isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberMustBeSmallerOrEqualToRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, to.toString());
                    }
                }
                else if (to === Number.POSITIVE_INFINITY) {
                    if (!ss.isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberMustBeGreaterOrEqualToRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, from.toString());
                    }
                }
                else {
                    if (!ss.isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberMustBeWithinRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, from.toString() + ' - ' + to.toString());
                    }
                }
                return false;
            }
        }
        if (ok && !ss.isNullOrUndefined(parameters)) {
            if (parameters.positiveOnly && num < 0) {
                if (!ss.isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberMustBePositive.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle);
                }
                return false;
            }
            if (parameters.negativeOnly && num > 0) {
                if (!ss.isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberMustBeNegative.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle);
                }
                return false;
            }
            if (parameters.integersOnly && parseInt(num) !== num) {
                if (!ss.isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberMustBeInteger.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle);
                }
                return false;
            }
        }
    }
    else {
        if (!ss.isNullOrUndefined(outErrorMsg)) {
            outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().numberNotValid.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle);
        }
        return false;
    }
    return true;
}
js.com.cs.v4.Util.Validation.isAlphaNumeric = function js_com_cs_v4_Util_Validation$isAlphaNumeric(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v4.Util.Validation.containOnlyCharacters(str, 'a-zA-Z0-9_');
}
js.com.cs.v4.Util.Validation.isCreditCardNumber = function js_com_cs_v4_Util_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.v4.Util.Validation.isDate = function js_com_cs_v4_Util_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.v4.Classes.Forms.Validation.FormFieldValidationParams">
    /// </param>
    /// <param name="outErrorMsg" type="js.com.cs.v4.Util.OUTPUT_ERROR_MSG">
    /// </param>
    /// <param name="itemTitle" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!ss.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.v4.Util.DateUtil.parseStringToDate(str, dateFormat);
    if (!ss.isNullOrUndefined(d)) {
        if (!ss.isNullOrUndefined(parameters.dateFrom) && !ss.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 (!ss.isNullOrUndefined(outErrorMsg)) {
                    var rangeText = js.com.cs.v4.Util.DateUtil.formatDate(parameters.dateFrom, dateFormat) + ' - ' + js.com.cs.v4.Util.DateUtil.formatDate(parameters.dateTo, dateFormat);
                    outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().dateMustBeBetweenRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, rangeText);
                }
                return false;
            }
        }
        else if (!ss.isNullOrUndefined(parameters.dateFrom) && d < parameters.dateFrom) {
            if (!ss.isNullOrUndefined(outErrorMsg)) {
                outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().dateMustBeAfterRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, js.com.cs.v4.Util.DateUtil.formatDate(parameters.dateFrom, dateFormat));
            }
            return false;
        }
        else if (!ss.isNullOrUndefined(parameters.dateTo) && d > parameters.dateTo) {
            if (!ss.isNullOrUndefined(outErrorMsg)) {
                outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().dateMustBeBeforeRange.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, js.com.cs.v4.Util.DateUtil.formatDate(parameters.dateTo, dateFormat));
            }
            return false;
        }
    }
    else {
        if (!ss.isNullOrUndefined(outErrorMsg)) {
            outErrorMsg.errorMessage = js.com.cs.v4.UI.Forms.FieldValidatorTexts.get_instance().dateNotValid.replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD, itemTitle).replaceAll(js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE, dateFormat.toLowerCase());
        }
        return false;
    }
    return true;
}
js.com.cs.v4.Util.Validation.isValueIn = function js_com_cs_v4_Util_Validation$isValueIn(item, values, caseSensitive) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="values" type="js.com.cs.v4.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.v4.Util.Validation.isValueNotIn = function js_com_cs_v4_Util_Validation$isValueNotIn(item, values, caseSensitive) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="values" type="js.com.cs.v4.Classes.General.Arrays.MyArray">
    /// </param>
    /// <param name="caseSensitive" type="Boolean">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v4.Util.Validation.isValueIn(item, values, caseSensitive);
}
js.com.cs.v4.Util.Validation.isIPAddress = function js_com_cs_v4_Util_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.v4.Util.WindowUtil

js.com.cs.v4.Util.WindowUtil = function js_com_cs_v4_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.v4.Controls.Common.MyElement" static="true">
    /// </field>
    /// <field name="_SCROLLBAR_WIDTH" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_EVENTS_HANDLER" type="js.com.cs.v4.Events.GenericEventsHandler" static="true">
    /// </field>
}
js.com.cs.v4.Util.WindowUtil.get_windowElement = function js_com_cs_v4_Util_WindowUtil$get_windowElement() {
    /// <value type="js.com.cs.v4.Controls.Common.MyElement"></value>
    if (js.com.cs.v4.Util.WindowUtil._WINDOW == null) {
        js.com.cs.v4.Util.WindowUtil._WINDOW = new js.com.cs.v4.Controls.Common.MyElement(js.com.JQueryScriptSharpV2.jQueryUtil.select(window));
    }
    return js.com.cs.v4.Util.WindowUtil._WINDOW;
}
js.com.cs.v4.Util.WindowUtil.get_windowElementJQuery = function js_com_cs_v4_Util_WindowUtil$get_windowElementJQuery() {
    /// <value type="jQuery"></value>
    return jQuery(window);
}
js.com.cs.v4.Util.WindowUtil._bind = function js_com_cs_v4_Util_WindowUtil$_bind(type, data, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="data" type="Object">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(type);
    js.com.cs.v4.Util.WindowUtil._EVENTS_HANDLER.addListener(strType, callback);
    js.com.cs.v4.Util.WindowUtil.get_windowElementJQuery().bind(strType, data, callback);
}
js.com.cs.v4.Util.WindowUtil._unBind = function js_com_cs_v4_Util_WindowUtil$_unBind(type, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(type);
    var objDelegate = js.com.cs.v4.Util.WindowUtil._EVENTS_HANDLER.removeListener(strType, callback, true);
    js.com.cs.v4.Util.WindowUtil.get_windowElementJQuery().unbind(strType, objDelegate);
}
js.com.cs.v4.Util.WindowUtil.add_onScroll = function js_com_cs_v4_Util_WindowUtil$add_onScroll(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.scroll, js.com.cs.v4.Util.WindowUtil.get_windowElementJQuery(), value);
}
js.com.cs.v4.Util.WindowUtil.remove_onScroll = function js_com_cs_v4_Util_WindowUtil$remove_onScroll(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.scroll, value);
}
js.com.cs.v4.Util.WindowUtil._bindEventToBody = function js_com_cs_v4_Util_WindowUtil$_bindEventToBody(type, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(type);
    js.com.cs.v4.Util.WindowUtil._EVENTS_HANDLER.addListener(strType, callback);
    var body = js.com.JQueryScriptSharpV2.jQueryUtil.select('body');
    body.bind(strType, body, callback);
}
js.com.cs.v4.Util.WindowUtil._unBindEventToBody = function js_com_cs_v4_Util_WindowUtil$_unBindEventToBody(type, callback) {
    /// <param name="type" type="js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE">
    /// </param>
    /// <param name="callback" type="js.com.JQueryScriptSharpV2.EventCallback">
    /// </param>
    var strType = js.com.JQueryScriptSharpV2.JQueryEnums.eventTypeToString(type);
    var objDelegate = js.com.cs.v4.Util.WindowUtil._EVENTS_HANDLER.removeListener(strType, callback, true);
    js.com.JQueryScriptSharpV2.jQueryUtil.select('body').unbind(strType, objDelegate);
}
js.com.cs.v4.Util.WindowUtil.add_onMouseMove = function js_com_cs_v4_Util_WindowUtil$add_onMouseMove(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._bindEventToBody(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseMove, value);
}
js.com.cs.v4.Util.WindowUtil.remove_onMouseMove = function js_com_cs_v4_Util_WindowUtil$remove_onMouseMove(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._unBindEventToBody(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseMove, value);
}
js.com.cs.v4.Util.WindowUtil.add_onMouseUp = function js_com_cs_v4_Util_WindowUtil$add_onMouseUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._bindEventToBody(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseUp, value);
}
js.com.cs.v4.Util.WindowUtil.remove_onMouseUp = function js_com_cs_v4_Util_WindowUtil$remove_onMouseUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._unBindEventToBody(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.mouseUp, value);
}
js.com.cs.v4.Util.WindowUtil.add_onKeyUp = function js_com_cs_v4_Util_WindowUtil$add_onKeyUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._bindEventToBody(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyUp, value);
}
js.com.cs.v4.Util.WindowUtil.remove_onKeyUp = function js_com_cs_v4_Util_WindowUtil$remove_onKeyUp(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._unBindEventToBody(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.keyUp, value);
}
js.com.cs.v4.Util.WindowUtil.add_onResize = function js_com_cs_v4_Util_WindowUtil$add_onResize(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._bind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.resize, js.com.cs.v4.Util.WindowUtil.get_windowElementJQuery(), value);
}
js.com.cs.v4.Util.WindowUtil.remove_onResize = function js_com_cs_v4_Util_WindowUtil$remove_onResize(value) {
    /// <param name="value" type="Function" />
    js.com.cs.v4.Util.WindowUtil._unBind(js.com.JQueryScriptSharpV2.JQUERY_EVENT_TYPE.resize, value);
}
js.com.cs.v4.Util.WindowUtil._changeLocation = function js_com_cs_v4_Util_WindowUtil$_changeLocation(newLocation) {
    /// <param name="newLocation" type="String">
    /// </param>
    var windowLocation = window;
    windowLocation.location = newLocation;
}
js.com.cs.v4.Util.WindowUtil._callChangeLocation = function js_com_cs_v4_Util_WindowUtil$_callChangeLocation() {
    js.com.cs.v4.Util.WindowUtil._changeLocation(js.com.cs.v4.Util.WindowUtil._sNewWindowLocation);
}
js.com.cs.v4.Util.WindowUtil.changeLocation = function js_com_cs_v4_Util_WindowUtil$changeLocation(newLocation) {
    /// <param name="newLocation" type="String">
    /// </param>
    js.com.cs.v4.Util.WindowUtil._sNewWindowLocation = newLocation;
    window.setTimeout(js.com.cs.v4.Util.WindowUtil._callChangeLocation, 50);
}
js.com.cs.v4.Util.WindowUtil.redirectTopFrame = function js_com_cs_v4_Util_WindowUtil$redirectTopFrame(url) {
    /// <param name="url" type="String">
    /// </param>
    window.top.location.href = url;
}
js.com.cs.v4.Util.WindowUtil.redirectParentFrame = function js_com_cs_v4_Util_WindowUtil$redirectParentFrame(url) {
    /// <param name="url" type="String">
    /// </param>
    window.parent.location.href = url;
}
js.com.cs.v4.Util.WindowUtil.getPageHeight = function js_com_cs_v4_Util_WindowUtil$getPageHeight() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v4.Util.DOMUtil.get_document().get_jQueryElement().height();
}
js.com.cs.v4.Util.WindowUtil.getPageWidth = function js_com_cs_v4_Util_WindowUtil$getPageWidth() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v4.Util.DOMUtil.get_document().get_jQueryElement().width();
}
js.com.cs.v4.Util.WindowUtil.getViewportWidth = function js_com_cs_v4_Util_WindowUtil$getViewportWidth(excludeScrollbars, topMostWindow) {
    /// <param name="excludeScrollbars" type="Boolean">
    /// Wheter to include scrollbars or not.
    /// </param>
    /// <param name="topMostWindow" type="Boolean">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (ss.isNullOrUndefined(excludeScrollbars)) {
        excludeScrollbars = true;
    }
    if (ss.isNullOrUndefined(topMostWindow)) {
        topMostWindow = true;
    }
    var windowObject = (topMostWindow) ? window.top : window;
    var w = windowObject.innerWidth;
    if (ss.isNullOrUndefined(w)) {
        w = js.com.JQueryScriptSharpV2.jQueryUtil.select(windowObject).width();
    }
    if ((!js.com.cs.v4.Util.GeneralUtil.isIE() || js.com.cs.v4.Util.GeneralUtil.isIE() > 8) && excludeScrollbars && js.com.cs.v4.Util.WindowUtil.hasVerticalScrollbars()) {
        w -= js.com.cs.v4.Util.WindowUtil.getScrollbarSize();
    }
    return w;
}
js.com.cs.v4.Util.WindowUtil.getViewportHeight = function js_com_cs_v4_Util_WindowUtil$getViewportHeight(excludeScrollbars, topMostWindow) {
    /// <param name="excludeScrollbars" type="Boolean">
    /// </param>
    /// <param name="topMostWindow" type="Boolean">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (ss.isNullOrUndefined(excludeScrollbars)) {
        excludeScrollbars = true;
    }
    if (ss.isNullOrUndefined(excludeScrollbars)) {
        excludeScrollbars = true;
    }
    if (ss.isNullOrUndefined(topMostWindow)) {
        topMostWindow = true;
    }
    var windowObject = (topMostWindow) ? window.top : window;
    var h = windowObject.innerHeight;
    if (ss.isNullOrUndefined(h)) {
        h = js.com.JQueryScriptSharpV2.jQueryUtil.select(windowObject).height();
    }
    if (excludeScrollbars && js.com.cs.v4.Util.WindowUtil.hasHorizontalScrollbars()) {
        if (!js.com.cs.v4.Util.GeneralUtil.isIE()) {
            h -= js.com.cs.v4.Util.WindowUtil.getScrollbarSize();
        }
    }
    return h;
}
js.com.cs.v4.Util.WindowUtil.getScrollLeft = function js_com_cs_v4_Util_WindowUtil$getScrollLeft() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v4.Util.DOMUtil.get_document().get_jQueryElement().scrollLeft();
}
js.com.cs.v4.Util.WindowUtil.getScrollTop = function js_com_cs_v4_Util_WindowUtil$getScrollTop() {
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v4.Util.DOMUtil.get_document().get_jQueryElement().scrollTop();
}
js.com.cs.v4.Util.WindowUtil.refresh = function js_com_cs_v4_Util_WindowUtil$refresh(addToHistory) {
    /// <param name="addToHistory" type="Boolean">
    /// </param>
    if (addToHistory) {
        window.top.location.href = unescape(window.top.location.pathname);
    }
    else {
        window.top.location.replace(unescape(window.top.location.pathname));
    }
}
js.com.cs.v4.Util.WindowUtil.hasVerticalScrollbars = function js_com_cs_v4_Util_WindowUtil$hasVerticalScrollbars() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v4.Util.WindowUtil.getPageHeight() > js.com.cs.v4.Util.WindowUtil.getViewportHeight(false);
}
js.com.cs.v4.Util.WindowUtil.hasHorizontalScrollbars = function js_com_cs_v4_Util_WindowUtil$hasHorizontalScrollbars() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v4.Util.WindowUtil.getPageWidth() > js.com.cs.v4.Util.WindowUtil.getViewportWidth(false);
}
js.com.cs.v4.Util.WindowUtil.getScrollbarSize = function js_com_cs_v4_Util_WindowUtil$getScrollbarSize() {
    /// <summary>
    /// Returns the size in px of this browsers scrollbar
    /// </summary>
    /// <returns type="Number" integer="true"></returns>
    if (js.com.cs.v4.Util.WindowUtil._SCROLLBAR_WIDTH === -1) {
        var div = js.com.JQueryScriptSharpV2.jQueryUtil.createElementFromHTML("<div style='width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;'><div style='height:100px;'></div>");
        js.com.JQueryScriptSharpV2.jQueryUtil.select('body').append(div);
        var w1 = js.com.JQueryScriptSharpV2.jQueryUtil.select('div', div).innerWidth();
        div.css('overflow-y', 'scroll');
        var w2 = js.com.JQueryScriptSharpV2.jQueryUtil.select('div', div).innerWidth();
        js.com.cs.v4.Util.WindowUtil._SCROLLBAR_WIDTH = w1 - w2;
    }
    return (!js.com.cs.v4.Util.WindowUtil._SCROLLBAR_WIDTH) ? js.com.cs.v4.Util.WindowUtil._scrollbaR_DEFAULT_SIZE : js.com.cs.v4.Util.WindowUtil._SCROLLBAR_WIDTH;
}
js.com.cs.v4.Util.WindowUtil._getPopupBoolValue = function js_com_cs_v4_Util_WindowUtil$_getPopupBoolValue(b) {
    /// <param name="b" type="Boolean">
    /// </param>
    /// <returns type="String"></returns>
    return (b) ? 'yes' : 'no';
}
js.com.cs.v4.Util.WindowUtil.openPopup = function js_com_cs_v4_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.v4.Util.POPUP_WINDOW_OPEN_POSITION">
    /// center / random / null
    /// </param>
    /// <returns type="js.com.cs.v4.Controls.Common.MyWindowInstance"></returns>
    var p = new js.com.cs.v4.Controls.Common.MyWindowInstanceParameters();
    p.url = url;
    p.targetName = windowName;
    p.width = width;
    p.height = height;
    p.scrollbars = scrollbars;
    p.location = locationBar;
    p.directories = directories;
    p.status = statusBar;
    p.menubar = menuBar;
    p.toolbar = toolBar;
    p.resizable = resizeable;
    p.position = position;
    var win = new js.com.cs.v4.Controls.Common.MyWindowInstance(p);
    return win;
}
js.com.cs.v4.Util.WindowUtil.getScreenWidth = function js_com_cs_v4_Util_WindowUtil$getScreenWidth() {
    /// <returns type="Number" integer="true"></returns>
    return screen.width;
}
js.com.cs.v4.Util.WindowUtil.getScreenHeight = function js_com_cs_v4_Util_WindowUtil$getScreenHeight() {
    /// <returns type="Number" integer="true"></returns>
    return screen.height;
}
js.com.cs.v4.Util.WindowUtil.scrollToWithPlugin = function js_com_cs_v4_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);
}
js.com.cs.v4.Util.WindowUtil.getWindow = function js_com_cs_v4_Util_WindowUtil$getWindow() {
    /// <returns type="WindowInstance"></returns>
    return window;
}


Type.registerNamespace('js.com.cs.v4.Classes');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Classes.TimeSpan

js.com.cs.v4.Classes.TimeSpan = function js_com_cs_v4_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.v4.Classes.TimeSpan.prototype = {
    _date: null,
    
    get_milliseconds: function js_com_cs_v4_Classes_TimeSpan$get_milliseconds() {
        /// <value type="Number" integer="true"></value>
        return this._date.getTime();
    },
    
    get_seconds: function js_com_cs_v4_Classes_TimeSpan$get_seconds() {
        /// <value type="Number"></value>
        return this.get_milliseconds() / 1000;
    },
    
    get_minutes: function js_com_cs_v4_Classes_TimeSpan$get_minutes() {
        /// <value type="Number"></value>
        return this.get_seconds() / 60;
    },
    
    get_hours: function js_com_cs_v4_Classes_TimeSpan$get_hours() {
        /// <value type="Number"></value>
        return this.get_minutes() / 60;
    },
    
    get_days: function js_com_cs_v4_Classes_TimeSpan$get_days() {
        /// <value type="Number"></value>
        return this.get_hours() / 24;
    },
    
    get_weeks: function js_com_cs_v4_Classes_TimeSpan$get_weeks() {
        /// <value type="Number"></value>
        return this.get_days() / 7;
    }
}


Type.registerNamespace('js.com.cs.v4.Enums');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Enums.POSITION

js.com.cs.v4.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.v4.Enums.POSITION.prototype = {
    top: 0, 
    topRight: 10, 
    right: 20, 
    bottomRight: 30, 
    bottom: 40, 
    bottomLeft: 50, 
    left: 60, 
    topLeft: 70, 
    center: 80
}
js.com.cs.v4.Enums.POSITION.registerEnum('js.com.cs.v4.Enums.POSITION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v4.Enums.KEY

js.com.cs.v4.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.v4.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.v4.Enums.KEY.registerEnum('js.com.cs.v4.Enums.KEY', false);


js.com.cs.v4.Core.Destroyable.registerClass('js.com.cs.v4.Core.Destroyable', null, js.com.cs.v4.Interfaces.IDestroyable);
js.com.cs.v4.Classes.Animation.CustomTween.registerClass('js.com.cs.v4.Classes.Animation.CustomTween', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress.registerClass('js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress');
js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenu.registerClass('js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenu');
js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox.registerClass('js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuComboBox');
js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel.registerClass('js.com.cs.v4.Classes.Forms.linkedMenu.LinkedMenuLevel');
js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit.registerClass('js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit');
js.com.cs.v4.Classes.Forms.Validation.CharsLimit.registerClass('js.com.cs.v4.Classes.Forms.Validation.CharsLimit', js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit);
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams.registerClass('js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationSubGroupParams');
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase.registerClass('js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase');
js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams.registerClass('js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams', js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParamsBase);
js.com.cs.v4.Classes.Forms.Validation.WordsLimit.registerClass('js.com.cs.v4.Classes.Forms.Validation.WordsLimit', js.com.cs.v4.Classes.Forms.Validation.WordsOrCharsLimit);
js.com.cs.v4.Classes.General.Arrays.MyArray.registerClass('js.com.cs.v4.Classes.General.Arrays.MyArray', null, ss.IEnumerable);
js.com.cs.v4.Classes.General.Arrays.MyArrayInt.registerClass('js.com.cs.v4.Classes.General.Arrays.MyArrayInt', js.com.cs.v4.Classes.General.Arrays.MyArray);
js.com.cs.v4.Classes.General.Arrays.MyArrayString.registerClass('js.com.cs.v4.Classes.General.Arrays.MyArrayString', js.com.cs.v4.Classes.General.Arrays.MyArray);
js.com.cs.v4.Classes.General.GeneralClass.registerClass('js.com.cs.v4.Classes.General.GeneralClass');
js.com.cs.v4.Classes.General.ListItem.registerClass('js.com.cs.v4.Classes.General.ListItem');
js.com.cs.v4.Classes.General.General.registerClass('js.com.cs.v4.Classes.General.General');
js.com.cs.v4.Classes.Geom.Point.registerClass('js.com.cs.v4.Classes.Geom.Point');
js.com.cs.v4.Classes.Styles.CSSStylesParser.registerClass('js.com.cs.v4.Classes.Styles.CSSStylesParser');
js.com.cs.v4.Classes.URL.QueryString.registerClass('js.com.cs.v4.Classes.URL.QueryString');
js.com.cs.v4.Classes.URL.URLHandler.registerClass('js.com.cs.v4.Classes.URL.URLHandler');
js.com.cs.v4.Classes.Validation.ValueChecker.registerClass('js.com.cs.v4.Classes.Validation.ValueChecker');
js.com.cs.v4.Classes.XHR.XHRBaseRequest.registerClass('js.com.cs.v4.Classes.XHR.XHRBaseRequest', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.Classes.XHR.XHRGetJSONRequest.registerClass('js.com.cs.v4.Classes.XHR.XHRGetJSONRequest', js.com.cs.v4.Classes.XHR.XHRBaseRequest);
js.com.cs.v4.Controls.Common.MyWindowInstanceParameters.registerClass('js.com.cs.v4.Controls.Common.MyWindowInstanceParameters');
js.com.cs.v4.Controls.Common.MyWindowInstance.registerClass('js.com.cs.v4.Controls.Common.MyWindowInstance', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.Controls.Common.MyElement.registerClass('js.com.cs.v4.Controls.Common.MyElement', null, js.com.cs.v4.Controls.Common.IMyElement, js.com.cs.v4.Interfaces.IDestroyable);
js.com.cs.v4.Controls.Common.MyAnchorElement.registerClass('js.com.cs.v4.Controls.Common.MyAnchorElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyDivElement.registerClass('js.com.cs.v4.Controls.Common.MyDivElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyFormElement.registerClass('js.com.cs.v4.Controls.Common.MyFormElement', js.com.cs.v4.Controls.Common.MyElement, js.com.cs.v4.Controls.Common.IMyElement);
js.com.cs.v4.Controls.Common.MyImageElement.registerClass('js.com.cs.v4.Controls.Common.MyImageElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyInputElement.registerClass('js.com.cs.v4.Controls.Common.MyInputElement', js.com.cs.v4.Controls.Common.MyElement, js.com.cs.v4.Controls.Common.IMyElement);
js.com.cs.v4.Controls.Common.MyLabelElement.registerClass('js.com.cs.v4.Controls.Common.MyLabelElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyListItemElem.registerClass('js.com.cs.v4.Controls.Common.MyListItemElem', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyParagraphElement.registerClass('js.com.cs.v4.Controls.Common.MyParagraphElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MySpanElement.registerClass('js.com.cs.v4.Controls.Common.MySpanElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyTableCellElement.registerClass('js.com.cs.v4.Controls.Common.MyTableCellElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyTableElement.registerClass('js.com.cs.v4.Controls.Common.MyTableElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyTableRowElement.registerClass('js.com.cs.v4.Controls.Common.MyTableRowElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Common.MyUnOrderedListElem.registerClass('js.com.cs.v4.Controls.Common.MyUnOrderedListElem', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Form.MyBaseFormElement.registerClass('js.com.cs.v4.Controls.Form.MyBaseFormElement', js.com.cs.v4.Controls.Common.MyElement);
js.com.cs.v4.Controls.Form.MyBaseButton.registerClass('js.com.cs.v4.Controls.Form.MyBaseButton', js.com.cs.v4.Controls.Form.MyBaseFormElement);
js.com.cs.v4.Controls.Form.MyButton.registerClass('js.com.cs.v4.Controls.Form.MyButton', js.com.cs.v4.Controls.Form.MyBaseButton, js.com.cs.v4.Controls.Form.IMyButtonElement);
js.com.cs.v4.Controls.Form.MyCheckBox.registerClass('js.com.cs.v4.Controls.Form.MyCheckBox', js.com.cs.v4.Controls.Form.MyBaseFormElement, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.Controls.Form.MyDropDownListParams.registerClass('js.com.cs.v4.Controls.Form.MyDropDownListParams');
js.com.cs.v4.Controls.Form.MyDropDownList.registerClass('js.com.cs.v4.Controls.Form.MyDropDownList', js.com.cs.v4.Controls.Form.MyBaseFormElement, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.Controls.Form.MyFileUpload.registerClass('js.com.cs.v4.Controls.Form.MyFileUpload', js.com.cs.v4.Controls.Form.MyBaseFormElement, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.Controls.Form.MyRadioButton.registerClass('js.com.cs.v4.Controls.Form.MyRadioButton', js.com.cs.v4.Controls.Form.MyBaseFormElement, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.Controls.Form.MyTextBox.registerClass('js.com.cs.v4.Controls.Form.MyTextBox', js.com.cs.v4.Controls.Form.MyBaseFormElement, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.Controls.Form.MyTextBoxHidden.registerClass('js.com.cs.v4.Controls.Form.MyTextBoxHidden', js.com.cs.v4.Controls.Form.MyTextBox);
js.com.cs.v4.Controls.Form.MyTextBoxMultiLine.registerClass('js.com.cs.v4.Controls.Form.MyTextBoxMultiLine', js.com.cs.v4.Controls.Form.MyTextBox);
js.com.cs.v4.Controls.Form.MyTextBoxPassword.registerClass('js.com.cs.v4.Controls.Form.MyTextBoxPassword', js.com.cs.v4.Controls.Form.MyTextBox);
js.com.cs.v4.Controls.Form.MyTextBoxSingleLine.registerClass('js.com.cs.v4.Controls.Form.MyTextBoxSingleLine', js.com.cs.v4.Controls.Form.MyTextBox);
js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenu.registerClass('js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenu');
js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenuListItem.registerClass('js.com.cs.v4.Controls.Form.Specialized.MyDropDownListMenuListItem', js.com.cs.v4.Classes.General.ListItem);
js.com.cs.v4.Controls.RedirectController.registerClass('js.com.cs.v4.Controls.RedirectController');
js.com.cs.v4.Events.EventItem.registerClass('js.com.cs.v4.Events.EventItem');
js.com.cs.v4.Events.EventsHandler.registerClass('js.com.cs.v4.Events.EventsHandler');
js.com.cs.v4.Events.GenericEventItem.registerClass('js.com.cs.v4.Events.GenericEventItem');
js.com.cs.v4.Events.GenericEventsHandler.registerClass('js.com.cs.v4.Events.GenericEventsHandler');
js.com.cs.v4.Plugins.Cufon.CufonOptions.registerClass('js.com.cs.v4.Plugins.Cufon.CufonOptions');
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase');
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBuffer.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBuffer', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferChange.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferChange', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferFull.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBufferFull', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventComplete.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventComplete', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventError.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventError', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventFullscreen.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventFullscreen', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventIdle.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventIdle', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMeta.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMeta', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMute.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventMute', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPause.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPause', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlay.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlay', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventStateChange);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylist.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylist', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylistItem.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventPlaylistItem', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventReady.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventReady', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventResize.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventResize', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventTime.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventTime', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventVolume.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventVolume', js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerEventBase);
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerObjectConfig.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerObjectConfig');
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerPlaylistItem.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerPlaylistItem');
js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerWrapper.registerClass('js.com.cs.v4.Plugins.JWPlayer.v1.JWPlayerWrapper');
js.com.cs.v4.Time.DelayedCall.registerClass('js.com.cs.v4.Time.DelayedCall', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.Time.Interval.registerClass('js.com.cs.v4.Time.Interval', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Accordion.Accordion.registerClass('js.com.cs.v4.UI.Accordion.Accordion');
js.com.cs.v4.UI.Accordion.AccordionDetails.registerClass('js.com.cs.v4.UI.Accordion.AccordionDetails');
js.com.cs.v4.UI.Accordion.v2.AccordionV2.registerClass('js.com.cs.v4.UI.Accordion.v2.AccordionV2', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Accordion.v2.AccordionV2Level.registerClass('js.com.cs.v4.UI.Accordion.v2.AccordionV2Level');
js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings.registerClass('js.com.cs.v4.UI.Accordion.v2.AccordionV2Settings');
js.com.cs.v4.UI.AJAXLoader.registerClass('js.com.cs.v4.UI.AJAXLoader', js.com.cs.v4.Controls.Common.MyTableElement);
js.com.cs.v4.UI.CtrlPositionerOld.registerClass('js.com.cs.v4.UI.CtrlPositionerOld');
js.com.cs.v4.UI.Image.registerClass('js.com.cs.v4.UI.Image');
js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnector.registerClass('js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnector');
js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorOptionParams.registerClass('js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorOptionParams');
js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams.registerClass('js.com.cs.v4.UI.CountryCallingCode.CountryCallingCodeConnectorParams');
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu.registerClass('js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenu');
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel.registerClass('js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevel', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem.registerClass('js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItem', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters.registerClass('js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelItemParameters');
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters.registerClass('js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuLevelParameters');
js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters.registerClass('js.com.cs.v4.UI.DropDownMenu.v1.DropDownMenuParameters');
js.com.cs.v4.UI.ExpandableTree.ExpandableTree.registerClass('js.com.cs.v4.UI.ExpandableTree.ExpandableTree');
js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel.registerClass('js.com.cs.v4.UI.ExpandableTree.ExpandableTreeLevel');
js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings.registerClass('js.com.cs.v4.UI.ExpandableTree.ExpandableTreeSettings');
js.com.cs.v4.UI.FLVPlayer.GeneralFLVPlayer.registerClass('js.com.cs.v4.UI.FLVPlayer.GeneralFLVPlayer');
js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.registerClass('js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject');
js.com.cs.v4.UI.Forms.Button.registerClass('js.com.cs.v4.UI.Forms.Button', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Forms.CheckBoxListRequired.registerClass('js.com.cs.v4.UI.Forms.CheckBoxListRequired');
js.com.cs.v4.UI.Forms.ButtonParams.registerClass('js.com.cs.v4.UI.Forms.ButtonParams');
js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword.registerClass('js.com.cs.v4.UI.Forms.FormFieldValidationParamsPassword', js.com.cs.v4.Classes.Forms.Validation.FormFieldValidationParams);
js.com.cs.v4.UI.Forms.FieldBase.registerClass('js.com.cs.v4.UI.Forms.FieldBase', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams.registerClass('js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams', js.com.cs.v4.UI.Forms.FieldBase);
js.com.cs.v4.UI.Forms.Field.registerClass('js.com.cs.v4.UI.Forms.Field', js.com.cs.v4.UI.Forms.FieldBaseWithFullValidationParams);
js.com.cs.v4.UI.Forms.FieldSingleItem.registerClass('js.com.cs.v4.UI.Forms.FieldSingleItem', js.com.cs.v4.UI.Forms.Field);
js.com.cs.v4.UI.Forms.FieldPassword.registerClass('js.com.cs.v4.UI.Forms.FieldPassword', js.com.cs.v4.UI.Forms.FieldSingleItem);
js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker.registerClass('js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters.registerClass('js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarkerParameters');
js.com.cs.v4.UI.Forms.FieldValidationResult.registerClass('js.com.cs.v4.UI.Forms.FieldValidationResult');
js.com.cs.v4.UI.Forms.FieldBaseCustomAjaxValidationResponseParams.registerClass('js.com.cs.v4.UI.Forms.FieldBaseCustomAjaxValidationResponseParams');
js.com.cs.v4.UI.Forms.FieldCSSClasses.registerClass('js.com.cs.v4.UI.Forms.FieldCSSClasses');
js.com.cs.v4.UI.Forms.FieldCSSHandler.registerClass('js.com.cs.v4.UI.Forms.FieldCSSHandler', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Forms.FieldDate3Combos.registerClass('js.com.cs.v4.UI.Forms.FieldDate3Combos', js.com.cs.v4.UI.Forms.Field, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.UI.Forms.FieldDate3CombosParams.registerClass('js.com.cs.v4.UI.Forms.FieldDate3CombosParams');
js.com.cs.v4.UI.Forms.FieldInputConstraint.registerClass('js.com.cs.v4.UI.Forms.FieldInputConstraint');
js.com.cs.v4.UI.Forms.FieldMediaItem.registerClass('js.com.cs.v4.UI.Forms.FieldMediaItem', js.com.cs.v4.UI.Forms.FieldSingleItem);
js.com.cs.v4.UI.Forms.FieldPhoneNumber.registerClass('js.com.cs.v4.UI.Forms.FieldPhoneNumber', js.com.cs.v4.UI.Forms.Field, js.com.cs.v4.Controls.Form.IMyBaseFormElement);
js.com.cs.v4.UI.Forms.FieldPhoneNumberParams.registerClass('js.com.cs.v4.UI.Forms.FieldPhoneNumberParams');
js.com.cs.v4.UI.Forms.FieldSubGroup.registerClass('js.com.cs.v4.UI.Forms.FieldSubGroup');
js.com.cs.v4.UI.Forms.FieldValidationIcon.registerClass('js.com.cs.v4.UI.Forms.FieldValidationIcon', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.Forms.FieldValidatorTexts.registerClass('js.com.cs.v4.UI.Forms.FieldValidatorTexts');
js.com.cs.v4.UI.Forms.FieldValidator.registerClass('js.com.cs.v4.UI.Forms.FieldValidator');
js.com.cs.v4.UI.Forms.Form.registerClass('js.com.cs.v4.UI.Forms.Form');
js.com.cs.v4.UI.Forms.FormError.registerClass('js.com.cs.v4.UI.Forms.FormError');
js.com.cs.v4.UI.Forms.FormsCollection.registerClass('js.com.cs.v4.UI.Forms.FormsCollection');
js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuClass.registerClass('js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuClass');
js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuComboBox.registerClass('js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuComboBox');
js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuLevel.registerClass('js.com.cs.v4.UI.Forms.LinkedMenu.LinkedMenuLevel');
js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon.registerClass('js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon');
js.com.cs.v4.UI.IBar.InformationBar.registerClass('js.com.cs.v4.UI.IBar.InformationBar', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.IBar.InformationBarProperties.registerClass('js.com.cs.v4.UI.IBar.InformationBarProperties');
js.com.cs.v4.UI.InfiniteScroller.InfiniteScroller.registerClass('js.com.cs.v4.UI.InfiniteScroller.InfiniteScroller');
js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters.registerClass('js.com.cs.v4.UI.InfiniteScroller.InfiniteScrollerParameters');
js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendar.registerClass('js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendar');
js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters.registerClass('js.com.cs.v4.UI.JQuery.FullCalendar.FullCalendarParameters');
js.com.cs.v4.UI.JQuery.JQueryDialog.registerClass('js.com.cs.v4.UI.JQuery.JQueryDialog', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable.registerClass('js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable');
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableIconSize.registerClass('js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableIconSize');
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociablePopupSettings.registerClass('js.com.cs.v4.UI.JQuery.prettySociable._PrettySociablePopupSettings');
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings.registerClass('js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableSettings');
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableTooltipOffset.registerClass('js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableTooltipOffset');
js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableWebsiteSettings.registerClass('js.com.cs.v4.UI.JQuery.prettySociable._PrettySociableWebsiteSettings');
js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest.registerClass('js.com.cs.v4.UI.KeywordSuggest.KeywordSuggest');
js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult.registerClass('js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResult', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResults.registerClass('js.com.cs.v4.UI.KeywordSuggest.KeywordSuggestResults', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.KeywordSuggest._KeywordSuggestResponse.registerClass('js.com.cs.v4.UI.KeywordSuggest._KeywordSuggestResponse');
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownSelectData.registerClass('js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownSelectData');
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown.registerClass('js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdown', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData.registerClass('js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownItemData');
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters.registerClass('js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownParameters');
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdowns.registerClass('js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdowns');
js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters.registerClass('js.com.cs.v4.UI.LinkedDropdowns.v1.LinkedDropdownsParameters');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryFunctionality.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryFunctionality');
js.com.cs.v4.UI.MediaGallery.v1.MediaGallery.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGallery', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropContent', js.com.cs.v4.Controls.Common.MyDivElement, js.com.cs.v4.Interfaces.IDestroyable);
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropController');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropData.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemCropData');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemData');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionFunctionality');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSectionData');
js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGallerySettings');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabFunctionality');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTab', js.com.cs.v4.Controls.Common.MyAnchorElement);
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabsFunctionality');
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryTabs', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryUpload.registerClass('js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryUpload', js.com.cs.v4.Controls.Common.MyDivElement);
js.com.cs.v4.UI.Mouse.HoverGroup.registerClass('js.com.cs.v4.UI.Mouse.HoverGroup', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Mouse.MouseAttach.registerClass('js.com.cs.v4.UI.Mouse.MouseAttach');
js.com.cs.v4.UI.NavigationMenu.NavigationMenu.registerClass('js.com.cs.v4.UI.NavigationMenu.NavigationMenu');
js.com.cs.v4.UI.NavigationMenu.NavigationMenuSettings.registerClass('js.com.cs.v4.UI.NavigationMenu.NavigationMenuSettings');
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton', js.com.cs.v4.Controls.Common.MyAnchorElement);
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigation.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigation');
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.SliderNavigationDetails');
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigation');
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationButton', js.com.cs.v4.Controls.Common.MyAnchorElement);
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationDetails');
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationListItem', js.com.cs.v4.Controls.Common.MyListItemElem);
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList.registerClass('js.com.cs.v4.UI.NavigationMenu.SliderNavigation.v2.SliderNavigationUnorderedList', js.com.cs.v4.Controls.Common.MyUnOrderedListElem);
js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass.registerClass('js.com.cs.v4.UI.PopUpMenu.Helpers.GetDivReturnClass');
js.com.cs.v4.UI.PopUpMenu.MenuItem.registerClass('js.com.cs.v4.UI.PopUpMenu.MenuItem');
js.com.cs.v4.UI.PopUpMenu.MenuLevel.registerClass('js.com.cs.v4.UI.PopUpMenu.MenuLevel');
js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass.registerClass('js.com.cs.v4.UI.PopUpMenu.PopUpMenuClass');
js.com.cs.v4.UI.Position.ControlPositionerParams.registerClass('js.com.cs.v4.UI.Position.ControlPositionerParams');
js.com.cs.v4.UI.Position.ControlPositioner.registerClass('js.com.cs.v4.UI.Position.ControlPositioner', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS.registerClass('js.com.cs.v4.UI.Scroller.FIX_VERTICAL_POSITION_PARAMETERS');
js.com.cs.v4.UI.Scroller.FixVerticalPosition.registerClass('js.com.cs.v4.UI.Scroller.FixVerticalPosition');
js.com.cs.v4.UI.Scroller.ItemScroller.registerClass('js.com.cs.v4.UI.Scroller.ItemScroller');
js.com.cs.v4.UI.Scroller.Scroller.registerClass('js.com.cs.v4.UI.Scroller.Scroller');
js.com.cs.v4.UI.SelectableSections.SelectableSectionBase.registerClass('js.com.cs.v4.UI.SelectableSections.SelectableSectionBase', js.com.cs.v4.Core.Destroyable, js.com.cs.v4.UI.SelectableSections.ISelectableSection);
js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase.registerClass('js.com.cs.v4.UI.SelectableSections.SelectableSectionsBase', js.com.cs.v4.Core.Destroyable, js.com.cs.v4.UI.SelectableSections.ISelectableSections);
js.com.cs.v4.UI.Skype.DisableSkypeController.registerClass('js.com.cs.v4.UI.Skype.DisableSkypeController');
js.com.cs.v4.UI.SlideShow.v1.SlideDetails.registerClass('js.com.cs.v4.UI.SlideShow.v1.SlideDetails');
js.com.cs.v4.UI.SlideShow.v1.SlideShow.registerClass('js.com.cs.v4.UI.SlideShow.v1.SlideShow');
js.com.cs.v4.UI.Text.TextFormater.registerClass('js.com.cs.v4.UI.Text.TextFormater');
js.com.cs.v4.UI.Text.TextOneLineWidthCalculator.registerClass('js.com.cs.v4.UI.Text.TextOneLineWidthCalculator');
js.com.cs.v4.UI.Ticker.FadingTicker.registerClass('js.com.cs.v4.UI.Ticker.FadingTicker');
js.com.cs.v4.UI.Ticker.RotatingTicker.registerClass('js.com.cs.v4.UI.Ticker.RotatingTicker');
js.com.cs.v4.UI.Tooltip.ControlTooltipParams.registerClass('js.com.cs.v4.UI.Tooltip.ControlTooltipParams');
js.com.cs.v4.UI.Tooltip.ControlTooltip.registerClass('js.com.cs.v4.UI.Tooltip.ControlTooltip', js.com.cs.v4.Core.Destroyable);
js.com.cs.v4.UI.Uploadify.v1._uploadify.registerClass('js.com.cs.v4.UI.Uploadify.v1._uploadify');
js.com.cs.v4.Util.AjaxUtil.registerClass('js.com.cs.v4.Util.AjaxUtil');
js.com.cs.v4.Util.ArrayUtil.registerClass('js.com.cs.v4.Util.ArrayUtil');
js.com.cs.v4.Util.Console.registerClass('js.com.cs.v4.Util.Console');
js.com.cs.v4.Util._CookieOptions.registerClass('js.com.cs.v4.Util._CookieOptions');
js.com.cs.v4.Util.CookieUtil.registerClass('js.com.cs.v4.Util.CookieUtil');
js.com.cs.v4.Util.DateUtil.registerClass('js.com.cs.v4.Util.DateUtil');
js.com.cs.v4.Util.DOMUtil.registerClass('js.com.cs.v4.Util.DOMUtil');
js.com.cs.v4.Util.EventUtil.registerClass('js.com.cs.v4.Util.EventUtil');
js.com.cs.v4.Util.FileUtil.registerClass('js.com.cs.v4.Util.FileUtil');
js.com.cs.v4.Util.FormUtil.registerClass('js.com.cs.v4.Util.FormUtil');
js.com.cs.v4.Util.GeneralUtil.registerClass('js.com.cs.v4.Util.GeneralUtil');
js.com.cs.v4.Util.GoogleAnalyticsUtil.registerClass('js.com.cs.v4.Util.GoogleAnalyticsUtil');
js.com.cs.v4.Util.jQueryPluginsUtil.registerClass('js.com.cs.v4.Util.jQueryPluginsUtil');
js.com.cs.v4.Util.jQueryUIUtil.registerClass('js.com.cs.v4.Util.jQueryUIUtil');
js.com.cs.v4.Util._jQueryUploadifyInitParams.registerClass('js.com.cs.v4.Util._jQueryUploadifyInitParams');
js.com.cs.v4.Util.jQueryUploadifyUtil.registerClass('js.com.cs.v4.Util.jQueryUploadifyUtil');
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.registerClass('js.com.cs.v4.Util.jQueryPrettyPhotoUtil');
js.com.cs.v4.Util.jQueryShadowBoxUtil.registerClass('js.com.cs.v4.Util.jQueryShadowBoxUtil');
js.com.cs.v4.Util.KeyboardUtil.registerClass('js.com.cs.v4.Util.KeyboardUtil');
js.com.cs.v4.Util.MouseUtil.registerClass('js.com.cs.v4.Util.MouseUtil');
js.com.cs.v4.Util.NumberUtil.registerClass('js.com.cs.v4.Util.NumberUtil');
js.com.cs.v4.Util.PageUtil.registerClass('js.com.cs.v4.Util.PageUtil');
js.com.cs.v4.Util.RandomUtil.registerClass('js.com.cs.v4.Util.RandomUtil');
js.com.cs.v4.Util.ResizeUtil.registerClass('js.com.cs.v4.Util.ResizeUtil');
js.com.cs.v4.Util.SortUtil.registerClass('js.com.cs.v4.Util.SortUtil');
js.com.cs.v4.Util.StringUtil.registerClass('js.com.cs.v4.Util.StringUtil');
js.com.cs.v4.Util._SwfObjectParams.registerClass('js.com.cs.v4.Util._SwfObjectParams');
js.com.cs.v4.Util.SWFObjectUtil.registerClass('js.com.cs.v4.Util.SWFObjectUtil');
js.com.cs.v4.Util.URLUtil.registerClass('js.com.cs.v4.Util.URLUtil');
js.com.cs.v4.Util.OUTPUT_ERROR_MSG.registerClass('js.com.cs.v4.Util.OUTPUT_ERROR_MSG');
js.com.cs.v4.Util.Validation.registerClass('js.com.cs.v4.Util.Validation');
js.com.cs.v4.Util.WindowUtil.registerClass('js.com.cs.v4.Util.WindowUtil');
js.com.cs.v4.Classes.TimeSpan.registerClass('js.com.cs.v4.Classes.TimeSpan');
js.com.cs.v4.Classes.Animation.CustomTween._animatE_PROPERTY$1 = 'left';
js.com.cs.v4.Classes.Forms.FileUploader.UploadProgress._Instance = null;
js.com.cs.v4.Classes.General.GeneralClass._Body = null;
js.com.cs.v4.UI.FLVPlayer.GeneralFLVPlayer.flvplayeR_COUNT = 0;
js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.jW_PLAYER_PATH = '/_common/flash/v1/jwplayer/v5/player.swf';
js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.expresS_INSTALL_PATH = '/_common/flash/v1/swfobject/2.1/expressInstall.swf';
js.com.cs.v4.UI.FLVPlayer.JWPlayer.JWPlayerObject.flasH_VERSION = '9';
js.com.cs.v4.UI.Forms.FieldPasswordStrengthMarker._csS_CLASS$2 = 'password-strength-meter';
js.com.cs.v4.UI.Forms.FieldBase.custoM_VALIDATION_NO_ERROR = '$%#NoError%$#';
js.com.cs.v4.UI.Forms.FieldCSSClasses._INSTANCE = null;
js.com.cs.v4.UI.Forms.FieldValidatorTexts._INSTANCE = null;
js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELD = '[FIELD]';
js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_FIELDS = '[FIELDS]';
js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_LENGTH = '[LENGTH]';
js.com.cs.v4.UI.Forms.FieldValidatorTexts.taG_VALUE = '[VALUES]';
js.com.cs.v4.UI.Forms.FormsCollection._Instance = null;
js.com.cs.v4.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
js.com.cs.v4.UI.Forms.FormsCollection.FORM_SUBMIT = false;
js.com.cs.v4.UI.Forms.FormsCollection.SUPRESS_ASPNET_FORM_SUBMIT = false;
js.com.cs.v4.UI.Forms.FormsCollection.HasFileUpload = false;
js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon._fadE_DURATION_MS = 250;
js.com.cs.v4.UI.HelpMessageIcon.HelpMessageIcon._fadE_ALPHA = 0.95;
js.com.cs.v4.UI.JQuery.prettySociable.PrettySociable._SETTINGS = null;
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CROP_SHOWN = false;
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_REORDER_SHOWN = false;
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_DELETE_SHOWN = false;
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemFunctionality._ALERT_MSG_CAPTION_SHOWN = false;
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.csS_BTN_REORDER = 'reorder';
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItem.a_HREF_LINK = 'cs-media-gallery-item-link';
js.com.cs.v4.UI.MediaGallery.v1.MediaGalleryItemSection.csS_CLASS_ITEMS = 'cs-media-gallery-items';
js.com.cs.v4.UI.Mouse.HoverGroup._mousE_LEAVE_INTERVAL_MS$1 = 200;
js.com.cs.v4.UI.NavigationMenu.NavigationMenu._hoveR_CLASS = 'hover-anchor';
js.com.cs.v4.UI.NavigationMenu.NavigationMenu.ulPadding = 0;
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnExpand$2 = 'nav-expanded';
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnCollapse$2 = 'nav-collapsed';
js.com.cs.v4.UI.NavigationMenu.SliderNavigation.NavigationButton._btnDim$2 = 'nav-dim';
js.com.cs.v4.UI.Tooltip.ControlTooltip._COUNT$1 = 0;
js.com.cs.v4.Util.DateUtil.montH_NAMES = null;
js.com.cs.v4.Util.DateUtil.daY_NAMES = null;
js.com.cs.v4.Util.DOMUtil._DOCUMENT = null;
js.com.cs.v4.Util.DOMUtil._BODY = null;
js.com.cs.v4.Util.jQueryUploadifyUtil._iniT_PARAMS = [];
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onChangeItem = null;
js.com.cs.v4.Util.jQueryPrettyPhotoUtil.__onClose = null;
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._TEMP_SETTINGS = null;
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_COUNT = 0;
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INIT_INLINE_CONTENT_GC = false;
js.com.cs.v4.Util.jQueryPrettyPhotoUtil._INLINE_CONTENT_CONTAINERS_IDS = [];
js.com.cs.v4.Util.jQueryShadowBoxUtil.___onOpen = null;
js.com.cs.v4.Util.jQueryShadowBoxUtil.___onClose = null;
js.com.cs.v4.Util.jQueryShadowBoxUtil.___onFinish = null;
js.com.cs.v4.Util.jQueryShadowBoxUtil.___onChange = null;
js.com.cs.v4.Util.jQueryShadowBoxUtil._onOpenFinishHandlerToCall = null;
js.com.cs.v4.Util.jQueryShadowBoxUtil._HANDLERS_INIT = false;
js.com.cs.v4.Util.jQueryShadowBoxUtil._SHADOWBOX_INIT = false;
js.com.cs.v4.Util.jQueryShadowBoxUtil._OPEN_LINK_COUNT = 0;
js.com.cs.v4.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED = false;
js.com.cs.v4.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS = [];
js.com.cs.v4.Util.MouseUtil._INIT = false;
js.com.cs.v4.Util.MouseUtil._mouseX = 0;
js.com.cs.v4.Util.MouseUtil._mouseY = 0;
js.com.cs.v4.Util.MouseUtil._mouseViewportX = 0;
js.com.cs.v4.Util.MouseUtil._mouseViewportY = 0;
js.com.cs.v4.Util.WindowUtil._scrollbaR_DEFAULT_SIZE = 17;
js.com.cs.v4.Util.WindowUtil._sNewWindowLocation = null;
js.com.cs.v4.Util.WindowUtil._WINDOW = null;
js.com.cs.v4.Util.WindowUtil._SCROLLBAR_WIDTH = -1;
js.com.cs.v4.Util.WindowUtil._EVENTS_HANDLER = new js.com.cs.v4.Events.GenericEventsHandler();

