//Combox
; RoadUI.Combox = function ()
{
var instance = this;
this.init = function ($comboxs)
{
$comboxs.each(function ()
{
var id = $(this).attr('id');
var name = $(this).attr('name') || id;
var validate = $(this).attr('validate');
var title = $(this).attr("title") || "";
var readonly = true;// $(this).attr("readonly") && "readonly" == $(this).attr("readonly").toLowerCase();
var disabled = $(this).prop("disabled");
var width1 = $(this).attr("width1");
var height1 = $(this).attr("height1");
var datatype = $(this).attr("datatype");
var change = $(this).attr("onchange");
var isflow = $(this).attr("isflow");
var type1 = $(this).attr("type1");
var datasource = $(this).attr("datasource");
var listmode = $(this).attr("listmode");
if (RoadUI.Core.isIe6Or7())
{
$(this).css({ "display": "inline-block" });
}
var offsetTop = RoadUI.Core.offsetTop($(this).get(0));
var offsetLeft = RoadUI.Core.offsetLeft($(this).get(0));
var tagName = $(this).get(0).tagName.toLowerCase();
var comboxWidth = $(this).width();
var divWidth = width1 ? "width:" + width1 + "px;" : RoadUI.Core.isIe6Or7() ? "width:" + $(this).width() + "px;" : "width:auto;";
var divHeight = height1 ? "height:" + height1 + "px;" : RoadUI.Core.isIe6Or7() ? "" : "height:auto;";
var $hide = $('= 0 ? 'onchange=\'' + change + '\'' : 'onchange="' + change + '"' : '')
+ (isflow ? 'isflow="' + isflow + '"' : '') + (type1 ? 'type1="' + type1 + '"' : '')
+ (datasource ? 'datasource="' + datasource + '"' : '') + (listmode ? 'listmode="' + listmode + '"' : '')
+ 'tagname="' + tagName + '"' + '/>');
var $input = $('');
var $div = $('
');
if (readonly)
{
$input.prop("readonly", true);
}
initElement($input, "comboxtext");
var $wrapDiv = $('');
var $wrapDiv1 = $('');
$wrapDiv1.append($hide).append($input);
$wrapDiv.append($wrapDiv1).append($div);
$(this).after($wrapDiv);
$div.hide();
var isTable = false;
switch (tagName)
{
case "select":
var multiple = $(this).prop("multiple");
var $options = $('option,optgroup', $(this));
var texts = [];
var values = [];
for (var i = 0; i < $options.size() ; i++)
{
if ($options.eq(i).get(0).tagName.toLowerCase() == "optgroup")
{
var $divoptgroup = $('
' + $options.eq(i).text() + '
');
$div.append($divoptgroup);
continue;
}
if ($options.eq(i).attr("selected") && $options.eq(i).prop("selected"))
{
texts.push($options.eq(i).text());
values.push($options.eq(i).val());
}
var optionValue = $options.eq(i).val();
var $divoptions = $('');
if (multiple)
{
var $checkbox = $('');
$divoptions.append($checkbox);
$checkbox.bind("click", function ()
{
instance.setValue($(this).val(), $(this).next().text(), id, true, $(this).prop("checked"));
$(this).parent().children("div").removeClass().addClass("comboxoption");
$(this).removeClass().addClass("comboxoption1");
});
}
else
{
$divoptions.bind("click", function ()
{
instance.setValue($(this).attr("value"), $(this).text(), id, false, $(this).prop("checked"));
$(this).parent().children("div[class!='comboxoptgroup']").removeClass().addClass("comboxoption");
$(this).removeClass().addClass("comboxoption1");
});
}
$divoptions.hover(function ()
{
$(this).removeClass().addClass('comboxoption1');
}, function ()
{
var cvalue = $("#" + id).val();
if (!cvalue || (',' + cvalue + ',').indexOf(',' + $(this).attr("value") + ',') == -1)
{
$(this).removeClass().addClass('comboxoption');
}
});
var $label = $('');
$divoptions.append($label);
$div.append($divoptions);
}
$hide.val(values.join(','));
$input.val(texts.join(',')).attr("title", texts.join(','));
break;
case "span":
case "div":
isTable = true;
var $table = $(this).children("table");
var $query = $("[class='querybar']", $(this));
if ($query.size() > 0)
{
$query.css("height", "22px");
$("input[type='button']", $query).bind('click', function ()
{
var query = [];
$(this).parent().children("input[type!='button']").each(function ()
{
query.push($(this).attr("id") + "=" + encodeURIComponent($(this).val()));
});
$table.attr("query", "&" + query.join('&'));
instance.loadData(10, 1, $table);
});
$div.append($query);
}
var multiple = ($(this).attr("multiple") && ("multiple" == $(this).attr("multiple").toLowerCase()
|| "1" == $(this).attr("multiple") || "true" == $(this).attr("multiple").toLowerCase()))
|| ($(this).attr("more") && ("1" == $(this).attr("more").toLowerCase() || "true" == $(this).attr("more").toLowerCase()));
if (multiple)
{
$table.prop("multiple", true);
}
$table.attr("comboxid", id);
if ($("tbody tr", $table).size() == 0)
{
instance.loadData(10, 1, $table);
}
else
{
instance.setTable(id, $table, $('tbody tr', $table), "");
}
$div.append($table);
//$div.css("overflow", "hidden");
//new RoadUI.Grid({ table: $table, resizeCol:false });
break;
}
if (offsetTop + (RoadUI.Core.isIE() ? 30 : 0) + $div.height() > $(window).height())
{
offsetTop = offsetTop - $div.height() - (RoadUI.Core.isIE() ? 2 : 3);
if (offsetTop)
{
$div.css("top", (offsetTop < 0 ? 0 : offsetTop) + "px");
}
}
if (offsetLeft + $div.width() >= $(window).width() - 30)
{
offsetLeft = offsetLeft - ($div.width() - comboxWidth) - 2;
}
if (offsetLeft)
{
$div.css("left", (offsetLeft < 0 ? 0 : offsetLeft) + "px");
}
if (disabled)
{
$input.prop("disabled", true);
}
else
{
$input.bind("focus", function ()
{
$div.show();
}).bind("click", function ()
{
$div.show();
}).bind("blur", function ()
{
$div.hover(function () { $div.show(); }, function () { $div.hide(); });
});
}
$(this).remove();
});
};
this.loadData = function (size, number, $table)
{
if (typeof ($table) == "string")
{
$table = $("#" + $table.replace('.', '\\.') + "_selectdiv table");
}
var url = $table.attr("dataurl");
var query = $table.attr("query");
$.ajax({
url: (url || "") + (url.indexOf('?') >= 0 ? "&" : "?") + "pagesize=" + (size || 10) + "&pagenumber=" + (number || 1) + (query || ""), dataType: "json", async: false, cache: false, success: function (json)
{
var pager = RoadUI.Core.getPager(json.count, size || 10, number || 1, "", "new RoadUI.Combox().loadData", $table.attr("comboxid"));
instance.setTable($table.attr('comboxid'), $table, json.data, pager);
}
});
};
this.initValue = function (id, value)
{
var $obj = $('#' + id.replace('.', '\\.'));
$obj.val(value);
var tagname = $obj.attr('tagname');
var text = "";
switch (tagname)
{
case "select":
var texts = [];
var $divs = $("#" + id.replace('.', '\\.') + "_selectdiv div");
for (var i = 0; i < $divs.size() ; i++)
{
var value1 = $divs.eq(i).attr("value");
if (("," + value + ",").indexOf("," + value1 + ",") >= 0)
{
texts.push($divs.eq(i).text());
$divs.eq(i).removeClass().addClass('comboxoption1');
}
else
{
$divs.eq(i).removeClass().addClass('comboxoption');
}
}
text = texts.join(',');
break;
case "span":
case "div":
var listmode = $obj.attr("listmode");
var datasource = $obj.attr("datasource");
if ("3" != datasource)
{
var $trs = $("#" + id.replace('.', '\\.') + "_selectdiv table tbody tr");
var texts = [];
for (var i = 0; i < $trs.size() ; i++)
{
var $td = $("td:first", $trs.eq(i));
var value1 = $td.attr("value");
if (("," + value + ",").indexOf("," + value1 + ",") >= 0)
{
var txt = $td.text();
texts.push(txt);
$td.attr("selected", "selected");
$("input[type='radio'],input[type='checkbox']", $td).prop("checked", true);
}
}
text = texts.join(',');
}
else
{
var $table = $("#" + id.replace('.', '\\.') + "_selectdiv table");
var gettextsurl = $table.attr("gettextsurl");
$.ajax({
url: gettextsurl + (gettextsurl.indexOf('?') >= 0 ? '&' : '?') + "values=" + encodeURIComponent(value), cache: false, async: false, success: function (txt)
{
text = txt;
var $trs = $("tbody tr", $table);
for (var i = 0; i < $trs.size() ; i++)
{
var $td = $("td:first", $trs.eq(i));
var value1 = $td.attr("value");
if (("," + value + ",").indexOf("," + value1 + ",") >= 0)
{
$td.attr("selected", "selected");
$("input[type='radio'],input[type='checkbox']", $td).prop("checked", true);
}
}
}
});
}
break;
}
$obj.next().val(text);
};
this.setTable = function (id, $table, trs, pager)
{
$table = $table || $("#" + id.replace('.', '\\.') + "_selectdiv table");
var multiple = $table.prop("multiple");
$("tbody", $table).html(trs || "");
if (pager)
{
if ($('tfoot', $table).size() == 0)
{
$table.append('
' + (pager || "") + '
');
}
else
{
$('tfoot tr td', $table).html(pager || "");
}
}
else
{
$('tfoot tr td', $table).remove();
}
var $hidde = $("#" + id.replace('.', '\\.'));
var $text = $("#" + id.replace('.', '\\.') + "_text");
var values = ($hidde.val() || "").split(',');
var texts = ($text.val() || "").split(',');
$("tbody tr", $table).each(function ()
{
var $td = $("td:first", $(this));
var $tdHtml = $td.html();
var selected = $td.attr("selected") && ("selected" == $td.attr("selected").toLowerCase() || "1" == $td.attr("selected") || "true" == $td.attr("selected").toLowerCase());
if (!selected)
{
selected = $td.attr("isselected") && ("selected" == $td.attr("isselected").toLowerCase() || "1" == $td.attr("isselected") || "true" == $td.attr("isselected").toLowerCase());
}
if (!selected)
{
var value = $("#" + id.replace('.', '\\.')).val() || "";
if (value && $td.attr("value") && ("," + value + ",").indexOf("," + ($td.attr("value") || "") + ",") >= 0)
{
selected = true;
}
}
if (selected)
{
values.push($td.attr("value"));
texts.push($td.text());
}
if (multiple)
{
var $checkbox = $('');
var $label = $('');
$checkbox.bind("click", function ()
{
instance.setValue($(this).val(), $(this).next().text(), id, true, $(this).prop('checked'));
});
$td.html('').append($checkbox, $label);
}
else
{
var $radio = $('');
var $label = $('');
$radio.bind("click", function ()
{
instance.setValue($(this).val(), $(this).next().text(), id, false, $(this).prop('checked'));
});
$td.html('').append($radio, $label);
}
});
$table.attr('border', '0');
$table.attr('cellpadding', '1');
$table.attr('cellspacing', '0');
$table.css('width', '100%');
$('tbody tr td', $table).css("padding", "0 0 0 3px");
$('thead tr td', $table).css("padding", "0 0 0 3px");
$table.removeClass().addClass("listtable");
new RoadUI.Init().table();
var values1 = [];
var texts1 = [];
for (var i = 0; i < values.length; i++)
{
var isIn = false;
for (var j = 0; j < values1.length; j++)
{
if (values1[j] == values[i])
{
isIn = true;
break;
}
}
if (!isIn)
{
values1.push(values[i]);
texts1.push(texts[i]);
}
}
$hidde.val(values1.join(','));
var txts = texts1.join(',');
$text.val(txts).attr("title", txts);
return $table;
};
this.setValue = function (value, text, id, isMultiple, checked)
{
var $valueele = $("#" + id.replace('.', '\\.'));
var $textele = $("#" + id.replace('.', '\\.') + "_text");
if (isMultiple)
{
if (checked)
{
value = $valueele.val() ? $valueele.val() + "," + value : value;
text = $textele.val() ? $textele.val() + "," + text : text;
}
else
{
var values = ($valueele.val() || "").split(',');
var texts = ($textele.val() || "").split(',');
var values1 = [];
var texts1 = [];
for (var i = 0; i < values.length; i++)
{
if (values[i] != value)
{
values1.push(values[i]);
texts1.push(texts[i]);
}
}
value = values1.join(',');
text = texts1.join(',');
}
}
$textele.val(text).attr("title", text);
$valueele.val(value);
if (!isMultiple)
{
$("#" + id.replace('.', '\\.') + "_selectdiv").hide();
}
$valueele.change();
};
this.reSet = function (id, options)
{
var $obj = $("#" + id.replace(".", "\\."));
if ($obj.size() == 0)
{
return;
}
var $selectdiv = $("#" + id.replace(".", "\\.") + "_selectdiv");
if ($selectdiv.size() == 0)
{
return;
}
var isflow = $obj.attr("isflow");
var type1 = $obj.attr("type1");
var change = $obj.attr("onchange");
var multiple = $("input[type='checkbox']", $selectdiv).size() > 0;
var width = $selectdiv.width();
var height = $selectdiv.height();
var select = '';
var $select = $(select);
$obj.parent().parent().after($select);
$obj.parent().parent().remove();
this.init($select);
}
}