var C = {
	site : "",
	isSubmit : true,
	getUrl : function(controller, action, params) { // 生成网址
		var url = "/index.php?app=" + controller;
		if (action) {
			url += "&act=" + action;
		}

		if (params) {
			url += "&" + params;
		}

		return url;
	},
	post : function(url, data, back) {
		if (!this.isSubmit) {
			return false;
		}

		this.isSubmit = false;
		var self = this;
		$.post(url, data, function(string) {			
			self.isSubmit = true;
			var data = $.parseJSON(string);
			back(data);
		});
	},
	doPost : function(url, data, tourl, isalert) { // AJAX提交并處理
		this.post(url, data, function(json) {
			if (json.ret != "0") {
				if (tourl == "error")
			    {
					var error = $("#show_error");
					error.innerHTML = json.msg;
					$.show(error);
			    }
				else
				{
					C.alert(json.msg);
				}
				
			} else {
				if (isalert) {
					C.alert(json.msg);
				}
				
				if (typeof tourl == "function")
				{
					tourl(json.data);
				}
				else if (tourl) {
					location.href = tourl;
				} else {
					location.reload();
				}
			}
		});
	},
	getForm : function(name) {  //得到表單數據
		var elements = document.getElementById(name).elements;
		if (!elements) {
			return false;
		}

		var data = {};
		for ( var i = 0; i < elements.length; i++) {
			var formType = elements[i].nodeName;
			var value = elements[i].value;
			var formName = elements[i].name;

			switch (formType) {
			case "INPUT":
				switch (elements[i].type.toLowerCase()) {
				case "text":
				case "password":
				case "submit":
				case "button":
				case "reset":
				case "hidden":
					if (data[formName] && value != "") {
						data[formName] += "," + value;
					} else {
						data[formName] = value;
					}
					break;
				case "radio":
				case "checkbox":
					if (elements[i].checked) {
						if (data[formName] && value != "") {
							data[formName] += "," + value;
						} else {
							data[formName] = value;
						}
					}
					break;
				default:
					break;
				}
				break;

			case "SELECT":
			case "TEXTAREA":
				data[formName] = data[formName] ? data[formName] + "," + value
						: value;
				break;
			case "BUTTON":
			case "submit":
			case "button":
			case "reset":
				data[formName] = value;
				break;
			break;
		default:
			break;
		}
	}

	return data;
   },
   open : function(title, url, width, height, fun) {
       window.oepnWin = layer.open({
           type: 2,
           title: title,
           shadeClose: true,
           shade: false,
           maxmin: true, //开启最大化最小化按钮
           area: [ width + 'px', height + 'px'],
           content: url,
           cancel : function() {
        	   if (fun)
        	   { 
        		   return fun(); 
        	   }
        	   return confirm('您确定要关闭吗？');
           }
       });
   },
   
   closelayer : function(){
	   parent.layer.closeAll();
   },
   
   alert : function(msg, fun) {
	   if (typeof layer != 'undefined' && layer)
	   {
		   layer.alert(msg);  
	   }
	   else if (typeof parent != 'undefined' && typeof parent.layer != 'undefined' && parent)
	   {
		   parent.layer.alert(msg); 
	   }
	   else
	   {
		   alert(msg);
	   }
	   
   },
   confirm : function(msg, back) {
	   if (confirm(msg))
	   {
		   back();
	   }
	   
	   return ;
	   var string = '<div class="poptips" id="poptips" style="display:block;">';
	   string += '<div class="bg" onclick="C.popWin.hideDiv()" style="display: none;"></div>';
	   string += '<div class="main"><div class="close"><span onclick="C.popWin.hideDiv()">&times;</span></div>';
	   string += '<div class="text"><p>'+ msg +'</p></div><div class="btn" ><span id="confirm_do" >确认</span><i onclick="C.popWin.hideDiv()" >取消</i> </div></div></div>';
	   C.popWin.showDiv(string, 370, 210, true);   
	   $("#confirm_do").click(function(){
		   back();
	   });
   }
}

var Upload = function(option) {
    this.id = option.id;
    this.type = option.type ? option.type : "pic";
    this.uploader = "";
    this.init(option);
}

$.extend(Upload.prototype, {
    markHtml : function() {
        var str = '<div id="'+ this.id+'_bnt_box" ><input type="hidden" name="'+ this.id +'" id="'+ this.id +'_name"  /><button type="button" id="'+ this.id+'_bnt"  class="btn btn-success " ><span class="bold">上传</span></button></div>';
        str += '&nbsp;&nbsp;<span id="'+ this.id +'_step" class="text-success" ></span>';
        
        str += '<div id="' + this.id + '_list" class="imglist"></div>';
        $("#" + this.id + "_box").html(str);
    },
    init : function(option) {
        this.markHtml();
        if (option.data)
        {
            for (var i = 0; i < option.data.length; i++)
            {
                var row = option.data[i];
                if (row.url != "")
                {
                    this.doAdd(row);
                }
            }
        }

        var self = this;
        var uploader = WebUploader.create({
            
            // 选完文件后，是否自动上传。
            auto: true,
            // swf文件路径
            swf: '/st/js/plugins/webuploader/Uploader.swf',
    
            // 文件接收服务端。
            server: this.getUrl(),
    
            // 选择文件的按钮。可选。
            // 内部根据当前运行是创建，可能是input元素，也可能是flash.
           
            pick: {
                id: '#' + this.id + "_bnt_box",
                label: ''
            },
    
            // 只允许选择图片文件。
            accept: {
                title: '文件',
                extensions: option.ext ? option.ext : 'gif,jpg,jpeg,bmp,png'
                //mimeTypes: 'image/*'
            },         
            formData : {},
            sendAsBinary : false,
            fileNumLimit : 100,
            compress : false
                        
        }); 

        uploader.on("fileQueued", function(file) {
            //alert(file.id)
        })
        
        uploader.on("uploadProgress", function(file, percentage) {
             var step = $("#" + self.id + "_step");
             percentage = parseInt(percentage * 100);
             step.html(percentage + "%");
        })
        
         uploader.on("error", function(string) {
             if (string == "Q_EXCEED_SIZE_LIMIT")
             {
                 return C.alert("文件大小超出限制,请重新上传");
             }
         
             C.alert("文件类型不正确");
        })
        
        uploader.on("uploadSuccess", function(file, response) {
            if (response.ret != 0)
            {
                C.alert(response.msg);
                return false;
            }
            
            self.doAdd(response.data, file);
        })
        
        this.uploader = uploader;
    },
    doAdd : function(data, file) {
    	var self = this;
       if (!data.name)
       {
           data.name = data.url;
       }
       if (this.type == "file")
       {
    	   var id = new Date().getTime();
    	   var obj =  $("#" + this.id + "_name");
    	   obj.val(obj.val() == "" ? data.url : obj.val()  + "," + data.url);
    	 
    	   // $("#" + this.id + "_name").val(data.url); 
    	   var ishide = this.id == "temp_url" ? 'style="display: none"' : '';
    	   if (username  == "admin")
    	   {
    		   ishide = "";
    	   }
    	   console.log(ishide)
           $("#" + this.id + "_list").append('<li id="li_pic'+ id +'" ><p><a href="'+ data.url + '" target="_blank" >'+ data.name +'</a>&nbsp;&nbsp;<a href="javascript:;" id="del_img_'+id+'" ' + ishide +' >删除</a></p></li>');
           $("#del_img_" + id).click(function() {
        	   self.delFile("li_pic" + id, data.url); 
           })
       }
       else if (this.type == "more")
       {
           this.backMore(data);
       }
       else if (this.type == "onefile")
       {
    	   var id = $("#id").val();
    	   var ishide = this.id == "temp_url" ? 'style="display: none"' : '';
    	   
           if (username  == "admin")
    	   {
    		   ishide = "";
    	   }

    	   var isedit = data.url.indexOf("txt") > -1 || data.url.indexOf("lrc") > -1 ? '&nbsp;&nbsp;<a href="/admin_product/editurl?url='+ encodeURIComponent(data.url) + '&id='+ id +'&type='+ this.id +'">编辑</a>&nbsp;&nbsp;  <a href="/admin_product/history?type=' + this.id   +'&cid='+ id + '">历史版本</a>' : '';
           if (this.id == "value")
           {
        	   isedit = "";
           }
            
           
    	   var id = new Date().getTime();
    	   if (file && file.name && this.id == 'addfile')
    	   { 
    		   $("#" + this.id + "_name").val(data.url + ",,," + file.name);
    	   }
    	   else
    	   {
    		   $("#" + this.id + "_name").val(data.url);
    	   }
           
           $("#" + this.id + "_list").html('<p id="li_pic'+ id +'" style="" ><a href="'+ data.url + '" target="_blank"  >'+ data.name.substring(0, 80) +'</a>'+ isedit +'&nbsp;&nbsp;<a href="javascript:;" style="display: block; width: 60px;" id="del_img_'+id+'" ' + ishide + ' >删除</a></p>');
           $("#del_img_" + id).click(function() {
        	   self.delFile("li_pic" + id, data.url); 
           }) 
       }
       else 
       {
           $("#" + this.id + "_name").val(data.url);
           var html = '<div class="ibox-content" style="border: 0; padding: 0;"><a class="fancybox" target="_blank" href="'+ data.url + '" ><img src="'+ data.url + '" height="100" style="width: auto;" /></a></div>';
           $("#" + this.id + "_list").html(html);
       }
    },
    getUrl : function() {
        var url = "";
        switch (this.type)
        {
            case "file" :
                url = "/admin_upload/file";
                break;
            case "onefile" : 
                url = "/admin_upload/file?id=" + this.id;
                break;
            default : 
                url = "/admin_upload/image";
                break;
        }
        return url;
    },
    backMore : function(row) {
        var self = this;
        var li = document.createElement("li");
        if (!row.id)
        {
            row.id = new Date().getTime();
        }
        li.id = "li_pic" + row.id
        var string = '<a href="'+row.url+'" target="_blank" ><img src="'+row.url+'" height="100" /></a><p><a href="javascript:;" id="del_img_'+row.id+'" >删除</a></p>';
        //alert(string);
        li.innerHTML = string;
        var autovalue = row.url;
        //alert(string)
        li.setAttribute("value", autovalue);
        var img = $("#" + this.id + "_list");
        img.append(li);
        var fun = function() {
            self.delFile("li_pic" + row.id, autovalue);   
        }
        
        $("#del_img_" + row.id).click(function() {
            fun();
        })
       // alert(this.name)
        //var id = this.id.replace("_file", "");
        var value = $("#" + this.id + "_name").val();
        $("#" + this.id + "_name").val(value ? value + '||' + autovalue : autovalue);        
    },
    delFile : function(id, path) {
        // this.limit++;
        // this.swfu.setFileUploadLimit(this.limit);    
       //  C.removeTag($("#" + id));
        // $.hide($("#"+this.name+"_nochoose"));
         $("#" + id).remove();
         this.removeId(path);
     },
     removeId : function(path) {
         var idObj = $("#" + this.id + "_name")[0];
         var value = idObj.value.split("||");
         var list = new Array();
         for (var i = 0; i < value.length; i++)
         {
             if (value[i] != path)
             {
                 list.push(value[i]);
             }
         }
         idObj.value = list.length == 0 ? "" : list.join('||');
     }
})

var QFile = function(option) {
	this.id = option.id;
	this.isFile = false;
	this.type = "file";
	this.domain = "";
	this.uploader = "";
	 this.markHtml = function() {
        var str = '<div id="'+ this.id+'_bnt_box"><input type="hidden" name="'+ this.id +'" id="'+ this.id +'_name"  /><button type="button" id="'+ this.id+'_bnt"  class="btn btn-primary " ></i>&nbsp;&nbsp;<span class="bold">上传</span></button></div>';
        str += '&nbsp;&nbsp;';
        
        str += '<div id="' + this.id + '_list" style="margin-top: -15px;" ></div><span id="'+ this.id +'_step" class="text-success" ></span>';
        $("#" + this.id + "_box").html(str);
    }
	 
    this.init = function(option) {
    	 this.markHtml();
    	 var self = this;
    	 if (option.data)
    	 {
    		 for (var i = 0; i < option.data.length; i++)
    		 {
    			 this.back(option.data[i].url)
    		 }
    	 }
    	 this.uploader = Qiniu.uploader({
    		 runtimes: 'html5,flash,html4',      // 上传模式，依次退化
     	    browse_button: this.id + '_bnt_box',         // 上传选择的点选按钮，必需
     	    uptoken_url: '/user-upload/token?type=' + this.type,         // Ajax请求uptoken的Url，强烈建议设置（服务端提供）

     	    get_new_uptoken: false,             // 设置上传文件的时候是否每次都重新获取新的uptoken
     	    // downtoken_url: '/downtoken',
     	    // Ajax请求downToken的Url，私有空间时使用，JS-SDK将向该地址POST文件的key和domain，服务端返回的JSON必须包含url字段，url值为该文件的下载地址
     	    // unique_names: true,              // 默认false，key为文件名。若开启该选项，JS-SDK会为每个文件自动生成key（文件名）
     	    // save_key: true,                  // 默认false。若在服务端生成uptoken的上传策略中指定了sava_key，则开启，SDK在前端将不对key进行任何处理
     	    domain: "http://otmki2zo0.bkt.clouddn.com/",     // bucket域名，下载资源时用到，必需
     	    container: this.id + '_box',             // 上传区域DOM ID，默认是browser_button的父元素
     	    max_file_size: '500mb',             // 最大文件体积限制
     	    flash_swf_url: '/st/js/plupload/Moxie.swf',  //引入flash，相对路径
     	    max_retries: 1,                     // 上传失败最大重试次数
     	    dragdrop: true,                     // 开启可拖曳上传
     	    drop_element: this.id + '_bnt_box',          // 拖曳上传区域元素的ID，拖曳文件或文件夹后可触发上传
     	    chunk_size: '100mb',                  // 分块上传时，每块的体积
     	    auto_start: true,                   // 选择文件后自动上传，若关闭需要自己绑定事件触发上传
     	    //x_vars : {
     	    //    查看自定义变量
     	    //    'time' : function(up,file) {
     	    //        var time = (new Date()).getTime();
     	              // do something with 'time'
     	    //        return time;
     	    //    },
     	    //    'size' : function(up,file) {
     	    //        var size = file.size;
     	              // do something with 'size'
     	    //        return size;
     	    //    }
     	    //},
     	   filters :  
           { 
     		   title: "files",
     		   mime_types : [ 
                  {title : "file", extensions : option.ext}
     		   ] 
    	    },
           
     	    init: {
     	        'FilesAdded': function(up, files) {
     	            plupload.each(files, function(file) {
     	            	return ;
     	                // 文件添加进队列后，处理相关的事情
     	            	 var list = $("#" + self.id + "_list");
     	            	 list.html(file.name)
     	            	 self.isFile = true;
     	            });
     	        },
     	        'BeforeUpload': function(up, file) {
     	               // 每个文件上传前，处理相关的事情
     	        },
     	        'UploadProgress': function(up, file) {
     	               // 每个文件上传时，处理相关的事情
     	        	 var step = $("#" + self.id + "_step");
     	        	 step.html(file.percent  + "%");
     	        },
     	        'FileUploaded': function(up, file, info) {
     	        	 var domain = up.getOption('domain');
		             var res = $.parseJSON(info.response);
		             var sourceLink = domain + res.key; 
		            // self.picture = sourceLink;
		            // $("#" + self.id + "_name").val(sourceLink);
		             self.backMore(sourceLink, file.name);
     	        },
     	        'Error': function(up, err, errTip) {
     	               //上传出错时，处理相关的事情
     	        	C.alert("上传失败，请检查文件格式或者大小");
     	        },
     	        'UploadComplete': function() {
     	        	
     	        },
     	        'Key': function(up, file) {
     	            return C.getKey(file.name);
     	        }
     	    }
     	});
    }
    
    this.back = function(url, fname) {
    	$("#" + this.id + "_name").val(url);
        var html = '<a class="fancybox" target="_blank" href="'+ url + '" >'+ url +'</a><p><a href="javascript:;" id="del_'+ this.id +'" >删除</a></p></div>';
        $("#" + this.id + "_list").html(html);
        this.bindDel();
    }
    this.backMore =  function(url, fname) {
        var self = this;
        var li = document.createElement("li");
        var id = new Date().getTime();
        li.id = "li_pic" + id;
        var string = '<a href="'+url+'"  >'+ url +'</a><p><a href="javascript:;" id="del_img_'+id+'" >删除</a></p>';
        //alert(string);
        li.innerHTML = string;
        var autovalue = url + ',,,' + fname;
        //alert(string)
        li.setAttribute("value", autovalue);
        var img = $("#" + this.id + "_list");
        img.append(li);
        var fun = function() {
            self.delFile("li_pic" + id, autovalue);   
        }
        
        $("#del_img_" + id).click(function() {
            fun();
        })
       // alert(this.name)
        //var id = this.id.replace("_file", "");
        var value = $("#" + this.id + "_name").val();
        $("#" + this.id + "_name").val(value ? value + '||' + autovalue : autovalue);        
    },

    this.delFile = function(id, path) {
         $("#" + id).remove();
         this.removeId(path);
     };
     
     this.removeId = function(path) {
         var idObj = $("#" + this.id + "_name")[0];
         var value = idObj.value.split("||");
         var list = new Array();
         for (var i = 0; i < value.length; i++)
         {
             if (value[i] != path)
             {
                 list.push(value[i]);
             }
         }
         idObj.value = list.length == 0 ? "" : list.join('||');
     }
    this.bindDel = function() {
    	var self = this;
    	$("#del_" + self.id).click(function(){
    		C.confirm("您确定要删除吗？", function() {
        		self.isFile = false;
        		$("#" + self.id + "_list").html('');
            	$("#" + self.id + "_name").val('');
                C.closelayer();
    		})
    	})
    }
    
    this.upload = function(back) {
        if (!back)
        {
            back = function() {};
        }

        this.back = back;
        if (!this.isFile)
        {
            back();
            return false;
        }

        this.uploader.start();
       
    }
    this.init(option);
}

C.getKey = function(name) {
    var info = name.split(".");
    var type = info[info.length - 1];
    var filename = new Date().getTime().toString();
    filename += Math.floor(Math.random() * ( 10 + 1));
    return filename + "." + type;	
}
