/******************************************************
 * U盘相关公共函数
 ******************************************************/
/**
 * 打印变量详细内容
 */
function var_dump(v){
    var msg = '';
    switch (typeof v){
        case 'undefined' : msg += 'undefined';break;
        case 'string'    : msg += "(string) : " + v;break;
        case 'boolean'   : msg += "(boolean) : " + v;break;
        case 'number'    : msg += "(number) : " + v;break;
        case 'object'    : 
            if(null === v) msg += 'null';
            else if(undefined !== v.length){
                msg += "(array) : \n\t";
                msg += "array("+v.length+"){\n\t\t";
                for(var i=0; i<v.length; ++i){
                    msg += "array("+i+")="+var_dump(v[i])+"\n\t\t";
                }
                msg += "}\n\t\t";
            }else{
                msg += "(object) : \n\t";
                for(var k in v){
                    msg += "object["+k+"]="+var_dump(v[k])+"\n\t";
                }
            };break;
        case 'function' : msg += "(function) : " + v.toString();break;
    }
    return msg;
}
/**
* 验证标准URL
*/
function checkURL(strValue){
	var regTextUrl = /^(http|https):\/\/(.+)$/;
	return regTextUrl.test(strValue);
}
/**
 * 检查会员自定义U盘url标识是否合法
 */
function isValidUrl(url){
	if(empty(url) || (/[^0-9a-zA-Z$]/g.test(url))){
		return false;
	}else return true;
}

/**
 * ext 特效窗口和对话框封装
 */
var QMy = Class.create();
QMy.Ext = {
	__t : null,
	/**
	 * alert 对话框
	 * @title  : 对话框标题 default 'youku alert'
	 * @msg    : 对话框消息内容
	 * @animEl : 对话框渐隐渐现到DOM元素ID default null
	 * @modal  : 是否启用模式对话框 true or false, default true
	 * @atc    : 是否自动关闭对话框 true or false, default false
	 * @fn     : 点击确定按钮时触发的函数名 default null
         * @nobtn  : false 显示按钮，true 不显示按钮
	 */
	alert : function (title, msg, animEl, modal, atc, fn, width, nobtn){
		clearTimeout(this.__t);
		var options = {};
		
		options.modal   = undefined === modal ? true : modal;
		options.fn      = empty(fn) ? null : fn;
		options.animEl  = empty(animEl) ? null : animEl;
		if (!nobtn) options.buttons = Ext.MessageBox.OK;
		if (nobtn) options.closable = false;
		
		options.title   = title || '';
		options.msg     = msg;
		options.width   = empty(width) ? 240 : parseInt(width);

                Ext.MessageBox.buttonText = {ok:"确定",cancel:"取消",yes:"确定",no:"取消"};
		Ext.MessageBox.show(options);
		if(!empty(atc)){
			var __f = function(){ 
				if(Ext.MessageBox.isVisible()){
					clearTimeout(QMy.Ext.__t);
					Ext.MessageBox.hide();
					if(fn) fn();
				}
			};
			QMy.Ext.__t = setTimeout(__f, 5*1000);
		}
	},
	/**
	 * confirm 对话框
	 * @title  : 对话框标题 default 'youku confirm'
	 * @msg    : 对话框消息内容
	 * @fn     : 点击确定按钮时触发的函数名 default null
	 * @animEl : 对话框渐隐渐现到DOM元素ID default null
	 * @modal  : 是否启用模式对话框 true or false, default true
	 * @buttons : 显示按钮 'yesno' or 'yesnocancel', default 'yesno'
	 */
	confirm : function(title, msg, fn, animEl, modal, buttons, width){
		clearTimeout(this.__t);
		var options = {};
		
		options.modal   = undefined === modal ? true : modal;
		options.fn      = empty(fn) ? null : fn;
		options.animEl  = empty(animEl) ? null : animEl;
		options.buttons = empty(buttons) ? Ext.MessageBox.YESNO : 
						  ( 'yesno' === buttons ? Ext.MessageBox.YESNO : 
						  ( 'ok'    === buttons ? Ext.MessageBox.OK    : Ext.MessageBox.YESNOCANCEL ));
		
		options.title   = title || 'youku confirm';
		options.msg     = msg;
		options.width   = empty(width) ? 240 : parseInt(width);
		
		Ext.MessageBox.buttonText = {ok:"确定",cancel:"取消",yes:"确定",no:"取消"}
		Ext.MessageBox.show(options);
	},
	/**
	 * prompt 对话框
	 * @title  : 对话框标题 default ' confirm'
	 * @msg    : 对话框消息内容
	 * @fn     : 点击确定按钮时触发的函数名 default null
	 * @modal  : 是否启用模式对话框 true or false, default true
	 * @animEl : 对话框渐隐渐现到DOM元素ID default null
	 * @width  : 对话框宽度 default 300
	 * @nultiline : 是否为多行数据框 default false
	 */
	prompt : function(title, msg, fn, modal, animEl, width, multiline){
		if(undefined !== width && isNaN(parseInt(width))) return;
		
		clearTimeout(this.__t);
		var options = {};
		
		options.prompt    = true,
		options.modal     = undefined === modal ? true : modal;
		options.fn        = empty(fn) ? null : fn;
		options.animEl    = empty(animEl) ? null : animEl;
		options.buttons   = Ext.MessageBox.OKCANCEL;
		options.width     = empty(width) ? 300 : parseInt(width);
		options.multiline = undefined === multiline ? false : (multiline !== true ? false : true);

		options.title   = title || 'youku prompt';
		options.msg     = msg;

		Ext.MessageBox.show(options);
	}
}
/**
 * 公共js方法
 */
QMy.Common = {
	/**
	 * 左侧控制菜单展开和关闭
	 */
	navTree : function (navId){
		var ul = $(navId);if(empty(ul)) return;
		if($(navId).visible()){
			Element.setStyle(ul,{'display':'none'});
			Element.removeClassName(navId+'_prev', 'current');
		}else{
			Element.setStyle(ul,{'display':'block'});
			Element.addClassName(navId+'_prev', 'current');
		}
	},
	/**
	 * 列表中被选中的对象ID集合
	 */
	selObjectIds : [],
	/**
     * 选中所有列表选项
     */
    checkAll : function (isChecked, btnName){
        var checkBoxes = document.getElementsByName('chx');
        
        // 根据chkall的选中状态设置列表其他选项的选中状态
        for(var i=0; i<checkBoxes.length; ++i){
            if(checkBoxes[i].disabled != true){
                if(isChecked && QMy.Common.selObjectIds.indexOf(checkBoxes[i].value) === -1) {
                    QMy.Common.selObjectIds.push(checkBoxes[i].value);
                }else if(!isChecked && QMy.Common.selObjectIds.indexOf(checkBoxes[i].value) !== -1){
                    QMy.Common.selObjectIds = QMy.Common.selObjectIds.without(checkBoxes[i].value);
                }
                checkBoxes[i].checked = isChecked;
            }
        }
        // 控制按钮是否可用
        if(!empty(btnName)){
            QMy.Common.checkBtnStatus(btnName);
        }
    },
    /**
     * 点选列表中的checkbox事件
     */
    checkSellist : function(chxObj, btnName){
        if(empty(chxObj)) return;
        else if (chxObj.checked) QMy.Common.selObjectIds.push(chxObj.value);
        else QMy.Common.selObjectIds = QMy.Common.selObjectIds.without(chxObj.value);

        // 控制按钮是否可用
        if(!empty(btnName)){
            QMy.Common.checkBtnStatus(btnName);
        }
    },
    /**
     * 从容器中移除一个id
     */
    sellistWithout : function(val, btnName){
        var temp = QMy.Common.selObjectIds.without(val);
        if(QMy.Common.selObjectIds.length == temp.length) return;
        
        QMy.Common.selObjectIds = temp;
        var checkBoxes = document.getElementsByName('chx');
        for(var i=0; i<checkBoxes.length; ++i){
            if(checkBoxes[i].value == val){
                checkBoxes[i].checked = false;
                break;
            }
        }
        // 控制按钮是否可用
        if(!empty(btnName)){
            QMy.Common.checkBtnStatus(btnName);
        }
    },
    /**
     * 检查控制按钮是否可用
     */
    checkBtnStatus : function(btnName){
        var isSeled = empty(QMy.Common.selObjectIds) ? false : true;
        var buttons = document.getElementsByName(btnName);          
        for(var i=0; i<buttons.length; ++i){
            buttons[i].disabled = isSeled ? false : true;
        }
    },
    /**
     * 更新列表后重新选中保存的列表元素
     * @see my_video_upload_list.tpl nova->trigger block
     */
    selectCheckBox : function(btnName){
        if(empty(QMy.Common.selObjectIds)) return;
        // 将容器中的id进行一次unique排重容错处理
        QMy.Common.selObjectIds = QMy.Common.selObjectIds.uniq();
        var checkBoxes = document.getElementsByName('chx');
        for(var i=0; i<checkBoxes.length; ++i){
            if(QMy.Common.selObjectIds.indexOf(checkBoxes[i].value) !== -1){
                checkBoxes[i].checked = true;
            }
        }
        // 控制按钮是否可用
        if(!empty(btnName)){
            QMy.Common.checkBtnStatus(btnName);
        }
    },
    /**
     * 取消所有选中的checkBox对象
     */
    clearCheckBox : function(btnName){
        var checkBoxes = document.getElementsByName('chx');
        for(var i=0; i<checkBoxes.length; ++i){
            if(checkBoxes[i].checked) checkBoxes[i].checked = false;
        }
        QMy.Common.selObjectIds = [];
        if(!empty(btnName)){
            QMy.Common.checkBtnStatus(btnName);
        }
    },
    /**
     * 元素渐显
     */
    fadeIn : function(event){
        var element = Event.element(event || window.event);
        var options = {from: (element.getOpacity() || 0.5), to: 1.0, duration: 0.3};
        QMy.Common.fadeInObj = new Effect.Appear(element,options);
    },
    /**
     * 元素渐隐
     */
    fadeOut : function(event){
        var element = Event.element(event || window.event);
        var options = {from: (element.getOpacity() || 1.0), to: 0.5, duration: 0.3};
        if (typeof QMy.Common.fadeInObj == 'object') QMy.Common.fadeInObj.cancel();
        QMy.Common.fadeOutObj = new Effect.Fade(element,options);
    }
}
/**
 * U盘列表公共方法
 */
QMy.Common.pager = Class.create();
QMy.Common.pager.prototype = {
    initialize : function(baseUrl, updateId) {
        if(arguments.length !== 2 || !baseUrl || !updateId){
            QMy.Ext.alert('错误','参数不正确！');
            return;
        }
        this.params = {};
        this.params.baseUrl  = baseUrl;
        this.params.updateId = updateId;
        this.params.page  = 1;
        this.params.size  = 20;
        this.params.order = 1;
        this.params.desc  = 1;
    },
    /**
     * 选择列表显示数量
     */
    changeSize : function (val){
     
        this.params.size  = val;
        var url = this.params.baseUrl+'_order_'+this.params.order+'_size_'+val+'_desc_'+this.params.desc;
        nova_update(this.params.updateId, url, '', 'GET');
    },
    /**
     * 选择列表排序方式
     */
    changeOrder : function (val){
     
        //var desc = (val != this.params.order) ? 1 : (this.params.desc == 0 ? 1 : 0);
        this.params.order = val;
        var url = this.params.baseUrl+'_order_'+val+'_size_'+this.params.size+'_desc_'+this.params.desc;
        nova_update(this.params.updateId, url, '', 'GET');
    },
    /**
     * 选择列表排序方式
     */
    changeDesc : function (desc,val){
        //var desc = (val != this.params.order) ? 1 : (this.params.desc == 0 ? 1 : 0);
        this.params.desc = desc;
        this.params.order = val;
        var url = this.params.baseUrl+'_order_'+val+'_size_'+this.params.size+'_desc_'+desc;
        nova_update(this.params.updateId, url, '', 'GET');
    },
    /**
     * 按自定义类型获得列表信息
     */
    changeType : function (type, val){
        var url = this.params.baseUrl+'_'+type+'_'+val  + 
                    '_order_' + this.params.order+
                    '_desc_'  + this.params.desc ;
        nova_update(this.params.updateId, url, '', 'GET');
    },
    /**
     * 刷新当前列表页，主要用于ajax修改列表对象内容后的回调函数
     */
    refreshPager : function(){
        var url = this.params.baseUrl;
        for(var key in this.params){
            if(key == 'baseUrl' || key == 'updateId') continue;
            url += '_'+key+'_' + this.params[key];
        }
        nova_update(this.params.updateId, url, '', 'GET');
    }
}

