getID().'$)\d*$';
} else {
$attrsTxt['pattern']='^\d*$';
}
// Convert artifact id to links.
$html_contents = preg_replace_callback('/\b(\d+)\b/', create_function('$matches', 'return _artifactid2url($matches[1], \'title\');'), $contents);
$edit_contents = $this->renderTextField ($extra_field_id, $contents, $size, $maxlength, $attrsTxt);
return html_e('div',array_merge(array('id'=>'edit'.$extra_field_id, 'style'=>'display: none', 'title'=>_('Tip: Enter a space-separated list of artifact ids ([#NNN] also accepted)')), $attrs), $edit_contents)
.html_e('div',array_merge(array('id'=>'show'.$extra_field_id, 'style'=>'display: block'), $attrs), $html_contents);
}
/**
* renderTextArea - this function builds a text area.
*
* @param int $extra_field_id The ID of this field.
* @param string $contents The data for this field.
* @param string $rows
* @param string $cols
* @param array $attrs Array of other attributes
* @return string text area and data.
*/
function renderTextArea($extra_field_id, $contents, $rows, $cols, $attrs = array()) {
return html_e('textarea', array_merge(array('name'=>'extra_fields['.$extra_field_id.']', 'rows'=>$rows, 'cols'=>$cols), $attrs), $contents, false);
}
/**
* renderDatetime - this function builds a Datetime field.
*
* @param int $extra_field_id The ID of this field.
* @param string $datetime datetime for this field.
* @param array $attrs Array of other attributes
* @return string datetime.
*/
function renderDatetime($extra_field_id, $datetime, $attrs = array()) {
if (!$datetime=='') {
$datetime_format = _('Y-m-d H:i');
$datetime = date($datetime_format, $datetime);
}
if (isset($attrs['class'])) {
$attrs['class'] = $attrs['class'] . ' datetimepicker';
} else {
$attrs['class'] = 'datetimepicker';
}
return html_e('input', array_merge(array('type'=>'text', 'name'=>'extra_fields['.$extra_field_id.']', 'value'=>$datetime), $attrs));
}
function renderDateRange($extra_field_id, $dateRange, $attrs = array()) {
// http://html5pattern.com/Dates
// Date with leapyear-check
$datepattern = '(?:19|20)(?:(?:[13579][26]|[02468][048])-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))|(?:[0-9]{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:29|30))|(?:(?:0[13578]|1[02])-31)))';
return html_e('input', array_merge(array('type'=>'text', 'name'=>'extra_fields['.$extra_field_id.']', 'pattern'=>$datepattern.' '.$datepattern, 'maxlength'=>21, 'size'=>21, 'value'=>$dateRange), $attrs));
}
/**
* renderEffort - this function builds a Effort extra field.
*
* @param int $extra_field_id The ID of this field.
* @param string $contents The data for this field.
* @param string $size
* @param string $maxlength
* @param array $attrs Array of other attributes
* @return string text area and data.
*/
function renderEffort($extra_field_id, $contents, $size, $maxlength, $attrs = array()) {
$effortUnitSet = New EffortUnitSet($this, $this->getEffortUnitSet());
$effortUnitFactory = New EffortUnitFactory($effortUnitSet);
$units = $effortUnitFactory->getUnits();
$vals = array();
$texts = array();
$factors = array();
foreach ($units as $unit) {
$vals [] = $unit->getID();
$texts [] = $unit->getName();
$opts_attrs []['data-factor'] = $unit->getConversionFactorForBaseUnit();
}
$valueInUnitBase = $effortUnitFactory->encodedToValueInBaseUnit($contents);
$value = $effortUnitFactory->encodedToValue($contents);
$unitId = $effortUnitFactory->encodedToUnitId($contents);
if (isset($attrs['class'])) {
$attrs['class'] .= ' effort';
} else {
$attrs['class'] = 'effort';
}
$attrs['data-effortid'] = $extra_field_id;
$hiddenAttrs = array();
if (isset($attrs['form'])) {
$hiddenAttrs['form'] = $attrs['form'];
}
$return = html_e('input', array_merge(array('type'=>'hidden', 'name'=>'extra_fields['.$extra_field_id.']', 'value'=>$valueInUnitBase.'U'.$unitId), $hiddenAttrs));
$return .= html_e('input', array_merge(array('type'=>'number', 'name'=>'value['.$extra_field_id.']', 'value'=>$value, 'size'=>$size, 'maxlength'=>$maxlength, 'min'=>0), $attrs));
$return .= html_build_select_box_from_arrays($vals, $texts, 'unit['.$extra_field_id.']', $unitId, false, '', false, '', false, $attrs, $opts_attrs);
return $return;
}
function renderEffortRange($extra_field_id, $contents, $size, $maxlength, $attrs = array()) {
$effortUnitSet = New EffortUnitSet($this, $this->getEffortUnitSet());
$effortUnitFactory = New EffortUnitFactory($effortUnitSet);
$units = $effortUnitFactory->getUnits();
$vals = array();
$texts = array();
$opts_attrs = array();
foreach ($units as $unit) {
$vals [] = $unit->getID();
$texts [] = $unit->getName();
$opts_attrs []['data-factor'] = $unit->getConversionFactorForBaseUnit();
}
$contentsFrom = '0U'.$vals[0];
$contentsTo = '0U'.$vals[0];
if (preg_match('/^(\d+U\d+) ?(\d+U\d+)?$/', $contents, $matches)) {
$contentsFrom = $matches[1];
$contentsTo = $matches[2];
}
$valueInUnitBaseFrom = $effortUnitFactory->encodedToValueInBaseUnit($contentsFrom);
$valueInUnitBaseTo = $effortUnitFactory->encodedToValueInBaseUnit($contentsTo);
$valueFrom = $effortUnitFactory->encodedToValue($contentsFrom);
$valueTo = $effortUnitFactory->encodedToValue($contentsTo);
$unitIdFrom = $effortUnitFactory->encodedToUnitId($contentsFrom);
$unitIdTo = $effortUnitFactory->encodedToUnitId($contentsTo);
$attrs['data-effortid'] = $extra_field_id;
if (isset($attrs['class'])) {
$attrs['class'] .= ' effort-range';
} else {
$attrs['class'] = 'effort-range';
}
$attrsFrom = $attrs;
$attrsTo = $attrs;
$hiddenAttrs = array();
if (isset($attrs['form'])) {
$hiddenAttrs['form'] = $attrs['form'];
}
$return = html_e('input', array_merge(array('type'=>'hidden', 'name'=>'extra_fields['.$extra_field_id.']', 'value'=>$valueInUnitBaseFrom.'U'.$unitIdFrom.' '.$valueInUnitBaseTo.'U'.$unitIdTo), $hiddenAttrs));
$return .= _('Between')._(':').html_e('br');
$return .= html_e('input', array_merge(array('type'=>'number', 'name'=>'value_from['.$extra_field_id.']', 'value'=>$valueFrom, 'size'=>$size, 'maxlength'=>$maxlength, 'min'=>0), $attrsFrom));
$return .= html_build_select_box_from_arrays($vals, $texts, 'unit_from['.$extra_field_id.']', $unitIdFrom, false, '', false, '', false, $attrsFrom, $opts_attrs);
$return .= html_e('br');
$return .= _('and')._(':').html_e('br');
$return .= html_e('input', array_merge(array('type'=>'number', 'name'=>'value_to['.$extra_field_id.']', 'value'=>$valueTo, 'size'=>$size, 'maxlength'=>$maxlength, 'min'=>0), $attrsTo));
$return .= html_build_select_box_from_arrays($vals, $texts, 'unit_to['.$extra_field_id.']', $unitIdTo, false, '', false, '', false, $attrsTo, $opts_attrs);
return $return;
}
/**
* renderFormulaField - this function builds a formula field (RO).
*
* @param string $contents The data for this field.
* @return string
*/
function renderFormulaField($contents) {
return $contents;
}
/**
* renderSLAField - this function builds a formula field (RO).
*
* @param int $extra_field_id The ID of this field.
* @param string $contents The data for this field.
* @param $ef
* @return string
*/
function renderSLAField($extra_field_id, $contents, $ef) {
global $aid;
if (!isset($aid) ||!$aid) {
return '';
}
$config = parse_ini_string($ef["attributes"]);
$field_name = $config['field'];
$rule = explode(':', $config['values']);
if (!isset($config['start_id']) || $aid >= $config['start_id']) {
// Get Max value from
// @todo use global variable $aid !!!
$artifact = artifact_get_object($aid);
$value = $artifact->getFieldDataByKey('alias', $field_name);
$field = $artifact->getFieldTypeByKey('alias', $field_name);
$elements = $artifact->ArtifactType->getExtraFieldElements($field['extra_field_id']);
for ($i = 0; $i < count($elements); $i++) {
if ($elements[$i]['element_name'] == $value) {
$max = 60 * $rule[$i];
continue;
}
}
if (!isset($max)) {
$value = 'Not Set';
} elseif ($ef['alias'] == 'response_time') {
// Implement Response SLA: Time from create to first comment.
$messages = $artifact->getMessageObjects();
if (count($messages) > 0) {
$message = $messages[count($messages) - 1];
$current_time = $message->getAddDate();
$timer_is_running = false;
} elseif ($artifact->getStatusID() == 2) {
$current_time = $artifact->getCloseDate();
$timer_is_running = false;
} else {
$current_time = time();
$timer_is_running = true;
}
$time = $current_time - $artifact->getOpenDate();
$percent = round(100 * $time / $max);
$remaining = $max - $time;
if ($remaining >= 0) {
$value = gmdate("G\h i", $remaining);
} else {
$value = '-' . gmdate("G\h i", -$remaining) . "";
}
if (!$timer_is_running) {
if ($remaining >= 0) {
$value = '' . _('OK') . '';
} else {
$value = '' . _('Missed') . '';
}
} else {
if ($percent > 90) {
$value = '' . $value . '';
} elseif ($percent > 80) {
$value = '' . $value . '';
} else {
$value = '' . $value . '';
}
}
} elseif ($ef['alias'] == 'resolution_time') {
// Implement Resolution SLA: Time from create to closed state.
list($last_status_change, $timer, $timer_is_running) = json_decode($contents);
$time = $timer;
if ($timer_is_running) {
$time += time() - $last_status_change;
}
$percent = round(100 * $time / $max);
$remaining = $max - $time;
if ($remaining >= 0) {
$value = gmdate("G\h i", $remaining);
} else {
$value = '-' . gmdate("G\h i", -$remaining) . "";
}
if ($artifact->getStatusID() == 2) {
if ($remaining >= 0) {
$value = '' . _('OK') . '';
} else {
$value = '' . _('Missed') . '';
}
} else {
if (!$timer_is_running) {
$value = ' ' . _('Suspended') . '';
} elseif ($percent > 90) {
$value = '' . $value . '';
} elseif ($percent > 80) {
$value = '' . $value . '';
} else {
$value = '' . $value . '';
}
}
}
} else {
$value = '' . _('Not Available') . '';
}
return $value;
}
function technicianBox($name = 'assigned_to[]', $checked = 'xzxz', $show_100 = true, $text_100 = 'none', $extra_id = '-1', $extra_name = '', $multiple = false, $attrs = array()) {
if ($text_100=='none'){
$text_100=_('Nobody');
}
$engine = RBACEngine::getInstance();
$techs = $engine->getUsersByAllowedAction('tracker', $this->getID(), 'tech') ;
$ids = array();
$names = array();
sortUserList($techs);
foreach ($techs as $tech) {
$ids[] = $tech->getID() ;
$names[] = $tech->getRealName() ;
}
if ($extra_id != '-1') {
$ids[]=$extra_id;
$names[]=$extra_name;
}
if ($multiple) {
if (!is_array($checked)) {
$checked = explode(',', $checked);
}
$size = min(count($ids)+1, 15);
return html_build_multiple_select_box_from_arrays($ids, $names, $name, $checked, $size, $show_100, $text_100, false, $attrs);
} else {
return html_build_select_box_from_arrays($ids, $names, $name, $checked, $show_100, $text_100, false, false, false, $attrs);
}
}
function submitterBox($name = 'submitted_by[]', $checked = 'xzxz', $show_100 = true, $text_100 = 'none', $extra_id = '-1', $extra_name = '', $multiple = false, $attrs = array()) {
if ($text_100=='none'){
$text_100=_('Nobody');
}
$result = $this->getSubmitters();
$ids =& util_result_column_to_array($result,0);
$names =& util_result_column_to_array($result,1);
if ($extra_id != '-1') {
$ids[]=$extra_id;
$names[]=$extra_name;
}
if ($multiple) {
if (!is_array($checked)) {
$checked = explode(',', $checked);
}
$size = min(count($ids)+1, 15);
return html_build_multiple_select_box_from_arrays($ids, $names, $name, $checked, $size, $show_100, $text_100, false, $attrs);
} else {
return html_build_select_box_from_arrays($ids, $names, $name, $checked, $show_100, $text_100, false, $attrs);
}
}
function lastModifierBox($name = 'last_modified_by[]', $checked = 'xzxz', $show_100 = true, $text_100 = 'none', $extra_id = '-1', $extra_name = '', $multiple = false) {
if ($text_100=='none'){
$text_100=_('Nobody');
}
$result = $this->getLastModifiers();
$ids =& util_result_column_to_array($result, 0);
$names =& util_result_column_to_array($result, 1);
if ($extra_id != '-1') {
$ids[] = $extra_id;
$names[] = $extra_name;
}
if ($multiple) {
if (!is_array($checked)) {
$checked = explode(',', $checked);
}
$size = min(count($ids)+1, 15);
return html_build_multiple_select_box_from_arrays($ids, $names, $name, $checked, $size, $show_100, $text_100);
} else {
return html_build_select_box_from_arrays($ids, $names, $name, $checked, $show_100, $text_100);
}
}
function cannedResponseBox($name = 'canned_response', $checked = 'xzxz', $attrs = array()) {
if (!isset($attrs['id'])) {
$attrs['id'] = $name;
}
return html_build_select_box($this->getCannedResponses(), $name, $checked, true, 'none', false, '', false, $attrs);
}
/**
* statusBox - show the statuses - automatically shows the "custom statuses" if they exist
*
* @param string $name
* @param string $checked
* @param bool $show_100
* @param string $text_100
* @param array $attrs
* @return string HTML code
*/
function statusBox($name = 'status_id', $checked = 'xzxz', $show_100 = false, $text_100 = 'none', $attrs = array()) {
if ($text_100=='none'){
$text_100=_('None');
}
return html_build_select_box($this->getStatuses(), $name, $checked, $show_100, $text_100, false, '', false, $attrs);
}
/**
* priorityBox - show the priorities
*
* @param string $name
* @param string $checked_val
* @param bool $nochange
* @param array $attrs
* @param bool $show_any
* @return string HTML code
*/
function priorityBox($name = 'priority', $checked_val = '3', $nochange = false, $attrs = array(), $show_any = false){
return html_build_priority_select_box($name, $checked_val, $nochange, $attrs, $show_any);
}
function javascript() {
$jsvariable ="
var invalidSelectMsg = '"._("One or more of the selected options is not allowed")."';
var invalidInputMsg = '". _("This choice is not allowed")."';
var groupId =".$this->Group->getID().";
var atId = ".$this->getID().";";
$effortUnitSet = New EffortUnitSet($this, $this->getEffortUnitSet());
if ($effortUnitSet->isAutoconvert()) {
$jseffort = <<<'EOS'
$("select.effort").change(function(){
var effortid = $(this).data("effortid");
var value = parseInt(parseInt($("input[name='extra_fields["+effortid+"]']").val())/$("select[name='unit["+effortid+"]'] option:selected").data('factor'));
$("input[name='value["+effortid+"]']").val(value);
$("input[name='extra_fields["+effortid+"]']").val(value*$("select[name='unit["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit["+effortid+"]']").val());
});
$("input.effort").change(function(){
var effortid = $(this).data("effortid");
var value = $("input[name='value["+effortid+"]']").val();
$("input[name='extra_fields["+effortid+"]']").val(value*$("select[name='unit["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit["+effortid+"]']").val());
});
$(".effort-range").change(function(){
var effortid = $(this).data("effortid");
$("input[name='extra_fields["+effortid+"]']").val($("input[name='value_from["+effortid+"]']").val()*$("select[name='unit_from["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit_from["+effortid+"]']").val()+' '+$("input[name='value_to["+effortid+"]']").val()*$("select[name='unit_to["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit_to["+effortid+"]']").val());
});
EOS;
} else {
$jseffort = <<<'EOS'
$(".effort").change(function(){
var effortid = $(this).data("effortid");
$("input[name='extra_fields["+effortid+"]']").val($("input[name='value["+effortid+"]']").val()*$("select[name='unit["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit["+effortid+"]']").val());
});
$(".effort-range").change(function(){
var effortid = $(this).data("effortid");
$("input[name='extra_fields["+effortid+"]']").val($("input[name='value_from["+effortid+"]']").val()*$("select[name='unit_from["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit_from["+effortid+"]']").val()+' '+$("input[name='value_to["+effortid+"]']").val()*$("select[name='unit_to["+effortid+"]'] option:selected").data('factor')+'U'+$("select[name='unit_to["+effortid+"]']").val());
});
EOS;
}
$javascript = <<<'EOS'
function showMessage( msg_text, msg_class) {
$("#maindiv h1").append($("", { "class": msg_class }).html( msg_text )).show();
};
$.expr[':'].invalid = function(elem, index, match) {
var invalids = document.querySelectorAll(':invalid'), result = false, len = invalids.length;
if (len) {
for (var i=0; i -1) {
$(this).prop("checked",true);
} else {
$(this).prop("checked",false);
}
});
} else if (fieldObj.is("input[type='radio']")){
fieldObj.each(function() {
var in_array = -1;
for (var key in field.value) {
if (field.value[key] == $(this).val()) {
in_array = key;
break;
}
}
if (in_array > -1) {
$(this).prop("checked",true);
} else {
$(this).prop("checked",false);
}
});
} else if (fieldObj.is("input")){
fieldObj.val(field.value);
} else if (fieldObj.is("select")){
fieldObj.val(field.value);
} else if (fieldObj.is("textarea")){
fieldObj.val(field.value);
}
});
return true;
}
});
});
$("img.addparent").click(function(){
$.ajax({
type: 'POST',
url: 'index.php',
data: 'rtype=ajax&function=add_parent&group_id='+groupId+'&atid='+atId+'&aid='+$("input#aid").val()+'&parent_id='+$("input#parent_id").val(),
async: false,
dataType: 'json',
success: function(answer){
if(answer['message']) {
showMessage(answer['message'], 'error');
} else {
$("table.parent").replaceWith(answer['parent']);
$("input[name='extra_fields["+answer['parent_efid']+"]']").val(answer['parent_id']);
$("div#show"+answer['parent_efid']).html(answer['parent_link']);
$("input#parent_id").val('');
$("div.addparent").addClass('hide');
$("img.removeparent").click(function(){
removeParent($(this).data("id"));
});
}
return true;
}
});
});
$("img.addchild").click(function(){
$.ajax({
type: 'POST',
url: 'index.php',
data: 'rtype=ajax&function=add_child&group_id='+groupId+'&atid='+atId+'&aid='+$("input#aid").val()+'&child_id='+$("input#child_id").val(),
async: false,
dataType: 'json',
success: function(answer){
if(answer['message']) {
showMessage(answer['message'], 'error');
} else {
$("table.children").replaceWith(answer['children']);
$("input#child_id").val('');
$("img.removechild").click(function(){
removeChild($(this).data("id"));
});
}
return true;
}
});
});
$("img.removeparent").click(function(){
removeParent($(this).data("id"));
});
function removeParent(id) {
$.ajax({
type: 'POST',
url: 'index.php',
data: 'rtype=ajax&function=remove_parent&group_id='+groupId+'&atid='+atId+'&aid='+$("input#aid").val()+'&parent_id='+id,
async: false,
dataType: 'json',
success: function(answer){
if(answer['message']) {
showMessage(answer['message'], 'error');
} else {
$("table#parent"+id).remove();
$("div.addparent").removeClass('hide');
}
return true;
}
});
};
$("img.removechild").click(function(){
removeChild($(this).data("id"));
});
function removeChild(id) {
$.ajax({
type: 'POST',
url: 'index.php',
data: 'rtype=ajax&function=remove_child&group_id='+groupId+'&atid='+atId+'&aid='+$("input#aid").val()+'&child_id='+id,
async: false,
dataType: 'json',
success: function(answer){
if(answer['message']) {
showMessage(answer['message'], 'error');
} else {
$("span#child"+id).remove();
}
return true;
}
});
};
$(".autoassign[name^='extra_fields']").change(function(){
if ($(this).prop('tagName') == 'SELECT') {
var elmnts = $(this).children('option:selected');
} else {
var elmnts = $(this).siblings('input:checked');
}
elmnts.each(function(i){
var aat = $(this).data("autoassignto");
$("select#tracker-assigned_to option[value="+aat.id+"]").prop('selected', true);
$("span#tracker-assigned_to").text(aat.name);
});
});
$(".with-depcy[name^='extra_fields']").change(function(){
if ($(this).prop('tagName') == 'SELECT') {
var elmnts = $(this).children('option:selected');
} else {
var elmnts = $(this).siblings('input:checked');
}
elmnts.each(function(i){
var dep = $(this).data("dependency");
if (this.value!='100') {
$(dep).each(function(j, val) {
$("select[name^='extra_fields["+val.field+"]']:invalid, input[name^='extra_fields["+val.field+"]']:invalid").each(function() {
this.setCustomValidity("");
$(this).off("change.invalid");
});
$("select[name^='extra_fields["+val.field+"]'] option").each(function(k,opt){
if (this.value!='100') {
if ($.inArray(parseInt(this.value),val.elmnt)>-1) {
$(this).prop('disabled', false).removeClass('option_disabled');
} else if (i==0) {
$(this).prop('disabled', true);
$(this).addClass('option_disabled');
}
}
});
$("input[name^='extra_fields["+val.field+"]']").each(function(k,opt){
if (this.value!='100') {
if ($.inArray(parseInt(this.value),val.elmnt)>-1) {
$(this).prop('disabled', false).removeClass($(this).attr('type')+'_disabled');
} else if (i==0) {
$(this).prop('disabled', true);
$(this).addClass($(this).attr('type')+'_disabled');
}
}
});
});
} else {
$(dep.fields).each(function(j, val) {
$("select[name^='extra_fields["+val+"]']:invalid, input[name^='extra_fields["+val+"]']:invalid").each(function() {
this.setCustomValidity("");
});
$("select[name^='extra_fields["+val+"]'] option.option_disabled").each(function() {
$(this).prop('disabled', false).removeClass('option_disabled');
});
$("input.radio_disable[name^='extra_fields["+val+"]']").each(function() {
$(this).prop('disabled', false).removeClass('radio_disabled');
});
$("input.checkbox_disabled[name^='extra_fields["+val+"]']").each(function() {
$(this).prop('disabled', false).removeClass('checkbox_disabled');
});
});
}
});
$("select[name^='extra_fields'] option:selected:disabled").parent().each(function() {
$(this).children('option:selected:disabled').prop('disabled', false);
this.setCustomValidity(invalidSelectMsg);
$(this).on("change.invalid", function() {
$(this).children('option.option_disabled:not(:disabled):not(:selected)').prop('disabled', true);
if (!$(this).children('option.option_disabled:selected').length) {
this.setCustomValidity("");
$(this).off("change.invalid");
}
});
});
$("input[name^='extra_fields']:checked:disabled").each(function() {
$(this).prop('disabled', false);
this.setCustomValidity(invalidInputMsg);
if ($(this).attr('type') == 'radio') {
$(this).siblings('input[type="radio"]').on("change.invalid", function() {
$(this).siblings('input[type="radio"]:invalid').prop('disabled', true).addClass('input_disabled').each(function() {
this.setCustomValidity("");
});
$(this).siblings('input[type="radio"]').off("change.invalid");
$(this).off("change.invalid");
});
} else {
$(this).on("change.invalid", function() {
$(this).prop('disabled', true);
this.setCustomValidity("");
$(this).off("change.invalid");
});
}
});
});
EOS;
return html_e('script', array('type'=>'text/javascript'), '//');
}
}
// Local Variables:
// mode: php
// c-file-style: "bsd"
// End: