function DynamicLayer (map, name, url, options, visibleLayers, displayLayers){
	this.url = url;
	this.options = options;
	this.layerName = name + ".layer";
	this.name = name;
	this.layer = new esri.layers.ArcGISDynamicMapServiceLayer(url,options);		
	this.visibleLayers = visibleLayers;
	this.displayLayers = displayLayers;
	map.addLayer(this.layer);
	
	if (visibleLayers == "none"){
		var noLayers = [];
		this.layer.setVisibleLayers(noLayers);
	}
	else if (isNotEmpty(visibleLayers)){
		this.layer.setVisibleLayers(this.visibleLayers);
	}	
}

function DynamicLayerPrototype(){
	DynamicLayer.prototype.showLayer = function(){
		this.layer.show();
	}
	DynamicLayer.prototype.hideLayer = function(){
		this.layer.hide();
	}

	DynamicLayer.prototype.setVisibleLayers = function (visibleLayers) {
		//alert("Visible Layers" + visibleLayers);
		this.visibleLayers = visibleLayers;
		this.layer.setVisibleLayers(this.visibleLayers);
	}

	 DynamicLayer.prototype.addVisibleLayer = function(layer){
		var found = false;
		for (var i=0, il=this.visibleLayers.length; i<il; i++) {
			if (this.visibleLayers[i] == layer){
				found = true;
			}
		}

		if (this.visibleLayers == "none"){
			this.visibleLayers = [];
		}
		
		if(found == false){
			this.visibleLayers = this.visibleLayers.concat(layer);
			this.setVisibleLayers(this.visibleLayers);
		}
	}

	DynamicLayer.prototype.removeVisibleLayer = function(layer){
		for (var i=0, il=this.visibleLayers.length; i<il; i++) {
			if (this.visibleLayers[i] == layer){
				this.visibleLayers.splice(i,1);
			}
		}
		this.setVisibleLayers(this.visibleLayers);
	}

	DynamicLayer.prototype.buildLayerList = function(displayLayers) {
		this.infos = this.layer.layerInfos;
		this.displayLayers = displayLayers;
		var info;
		var displayFlag;
		var items = [];
		var listItem = this.name + "_item";
		var index = 0;
		for (var i=0, il=this.infos.length; i<il; i++) {
			info = this.infos[i];
			displayFlag = "n";
			if (isEmpty(this.displayLayers)){
				displayFlag = "y";
			}
			else if (this.displayLayers == "none"){
				displayFlag = "n";
			}
			else{
				for(var d=0, dl=displayLayers.length; d<dl; d++){
					if (info.id == this.displayLayers[d]){
						displayFlag="y"
						d = dl + 1;
					}
				}
			}
			if (displayFlag == "y"){
				if (isEmpty(this.visibleLayers)){
					if (info.defaultVisibility) {
						 items[index] = "<input type='checkbox' class='" + listItem + "' checked  id='" + info.id + "' onclick='" + this.name +  ".updateLayerVisibility(\"." + listItem + "\");'  /><label for='" + info.id + "'>" + info.name + "</label>";
					}
					else{
						items[index] = "<input type='checkbox' class='" + listItem + "'  id='" + info.id + "' onclick='" + this.name +  ".updateLayerVisibility(\"." + listItem + "\");'  /><label for='" + info.id + "'>" + info.name + "</label>";
					}	
				}
				else if (this.visibleLayers == "none"){
					items[index] = "<input type='checkbox' class='" + listItem + "'  id='" + info.id + "' onclick='" + this.name +  ".updateLayerVisibility(\"." + listItem + "\");' /><label for='" + info.id + "'>" + info.name + "</label>";
				}	
				else{ 
					for (var v=0, vl=this.visibleLayers.length; v<vl; v++) {
						if (i == this.visibleLayers[v]) {
							 items[index] = "<input type='checkbox' class='" + listItem + "' checked  id='" + info.id + "' onclick='" + this.name +  ".updateLayerVisibility(\"." + listItem + "\");' /><label for='" + info.id + "'>" + info.name + "</label>";
							 v = vl + 1;
						}
						else{
							items[index] = "<input type='checkbox' class='" + listItem + "'  id='" + info.id + "' onclick='" + this.name +  ".updateLayerVisibility(\"." + listItem + "\");' /><label for='" + info.id + "'>" + info.name + "</label>";
						}
					}
				}
				index++;				
			}
		}
	if (items.length > 0){
		this.layerList = items.join("<br>");
	}
	
}

	DynamicLayer.prototype.updateLayerVisibility = function(listItem) {
		var inputs = dojo.query(listItem);
		visible = [];	
        for (var i=0, il=inputs.length; i<il; i++) {
		  if (inputs[i].checked) {
				visible.push(inputs[i].id);
          }
        }
		this.visibleLayers = visible;
		this.layer.setVisibleLayers(this.visibleLayers);
	}
}

