var $form_name = 'kernel_form';
var submitted = false;
var $upload_index = 1;

function openwin($url,$name,$width,$height)
{
	// prevent window from opening larger, then screen resolution on user's computer (to Kostja)

	//	alert('openwin: name = ['+$name+']');
	var left = Math.round((screen.width - $width)/2);
	var top = Math.round((screen.height - $height)/2);

	cur_x = document.all ? window.screenLeft : window.screenX;
	cur_y = document.all ? window.screenTop : window.screenY;

//	alert('current X,Y: '+cur_x+','+cur_y+' target x,y: '+left+','+top);
	var $window_params = 'left='+left+',top='+top+',width='+$width+',height='+$height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no';
	return window.open($url,$name,$window_params);
}

function openwin_simple($url,$name,$width,$height)
{
	// prevent window from opening larger, then screen resolution on user's computer (to Kostja)

	//	alert('openwin: name = ['+$name+']');
	var left = Math.round((screen.width - $width)/2);
	var top = Math.round((screen.height - $height)/2);

	cur_x = document.all ? window.screenLeft : window.screenX;
	cur_y = document.all ? window.screenTop : window.screenY;

//	alert('current X,Y: '+cur_x+','+cur_y+' target x,y: '+left+','+top);
	var $window_params = 'left='+left+',top='+top+',width='+$width+',height='+$height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no';
	window.open($url,$name,$window_params);
}


function openwin_noscroll($url,$name,$width,$height)
{
	// prevent window from opening larger, then screen resolution on user's computer (to Kostja)

	//	alert('openwin: name = ['+$name+']');
	var left = Math.round((screen.width - $width)/2);
	var top = Math.round((screen.height - $height)/2);

	cur_x = document.all ? window.screenLeft : window.screenX;
	cur_y = document.all ? window.screenTop : window.screenY;

//	alert('current X,Y: '+cur_x+','+cur_y+' target x,y: '+left+','+top);
	var $window_params = 'left='+left+',top='+top+',width='+$width+',height='+$height+',status=yes,resizable=yes,menubar=no,scrollbars=no,toolbar=no';
	return window.open($url,$name,$window_params);
}

function submit_event($prefix_special, $event, $t)
{
	if (!$event) $event = '';

	set_hidden_field('events[' + $prefix_special + ']', $event);
	if ($t) set_hidden_field('t', $t);

	submit_kernel_form();
}

function submit_kernel_form()
{
	if (submitted) {
		return;
	}
	submitted = true;

	var $form = document.getElementById($form_name);

	if (typeof $form.onsubmit == "function") {
		$form.onsubmit();
	}

	$form.submit();

	$form.target = '';
	set_hidden_field('t', t);

	window.setTimeout(function() {submitted = false}, 500);
}

function set_hidden_field($field_id, $value)
{
	var $kf = document.getElementById($form_name);
	var $field = $kf.elements[$field_id];
	if ($field) {
		$field.value = $value;
		return true;
	}

	$field = document.createElement('INPUT');
	$field.type = 'hidden';
	$field.name = $field_id;
	$field.id = $field_id;
	$field.value = $value;

	$kf.appendChild($field);
	return false;
}

function get_hidden_field($field)
{
	var $kf = document.getElementById($form_name);
	return $kf.elements[$field] ? $kf.elements[$field].value : false;
}

function open_popup($prefix_special, $event, $t, $window_size) {
	if (!$window_size) {
		$window_size = '750x400';
	}
	var $kf = document.getElementById($form_name);

	var $window_name = $t.replace(/(\/|-)/g, '_'); // replace "/" and "-" with "_"
	$window_size = $window_size.split('x');

	openwin('', $window_name, $window_size[0], $window_size[1]);
	$kf.target = $window_name;

	var $prev_opener = opener_action('p');
	submit_event($prefix_special, $event, $t);
	opener_action($prev_opener); // restore opener in parent window
}

function opener_action(new_action)
{
	var $prev_opener = get_hidden_field('m_opener');
	set_hidden_field('m_opener', new_action);
	return $prev_opener;
}

function OnResizePopup(e) {
	if (!document.all) {
		var $winW = window.innerWidth;
		var $winH = window.innerHeight;
	}
	else {
		var $winW = window.document.body.offsetWidth;
		var $winH = window.document.body.offsetHeight;
	}

	window.status = '[width: ' + $winW + '; height: ' + $winH + ']';
}

function addEvent(el, evname, func) {
	if (document.all) {
		el.attachEvent("on" + evname, func);
	} else {
		el.addEventListener(evname, func, true);
	}
}

function translate_phrase($label, $template) {
	set_hidden_field('phrases_label', $label);
	open_popup('phrases', 'OnNew', $template);
}

// dynamic uploader

function createCell($data, $class_name) {
	var $cell = document.createElement('td');
	$cell.innerHTML = $data;
	$cell.className = $class_name;
	return $cell;
}

function add_upload_field($row_id, $prefix, $field_prefix, $button, $cell_class)
{
	// remove "add" button from last upload input pair
	var $btn_class = $button.className;
	var $parent = $button.parentNode;
	$parent.removeChild($button);

	if (!$cell_class) $cell_class = '';

	$upload_index++;

	var $row0 = document.getElementById($row_id);
	var $input_mask = '	<input type="file" class="' + $btn_class + '" name="' + $prefix + '[0][' + $field_prefix + $upload_index + ']" id="' + $prefix + '[0][' + $field_prefix + $upload_index + ']" />\
						<input type="hidden" name="' + $prefix + '[0][' + $field_prefix + $upload_index + '][upload]" value="">';

	// thumbnail image
	var $row1 = document.createElement('tr');
	$row1.id = 'uploads_placeholder' + $upload_index;
	$row1.appendChild( createCell('<strong>' + $upload_label + $upload_index + ':</strong>', $cell_class) );
	$row1.appendChild( createCell($input_mask + $add_btn_code.replace('#NUM#', $upload_index), $cell_class) );
	$row1.appendChild( createCell('', 'error') );
	$row0.parentNode.insertBefore($row1, $row0.nextSibling);

}

function delete_upload_field($prefix, $field_name) {
	set_hidden_field('upload_field', $field_name);
	submit_event($prefix, 'OnDeleteUploadedFile');
}


function search($prefix_special, $grid_name)
{
	set_hidden_field('grid_name', $grid_name);
	submit_event($prefix_special, 'OnSearch');
}

function search_reset($prefix_special, $grid_name)
{
	set_hidden_field('grid_name', $grid_name);
	submit_event($prefix_special, 'OnSearchReset');
}

function search_keydown($event, $prefix_special, $grid)
{
	$event = $event ? $event : event;

	if (window.event) {// IE
		var $key_code = $event.keyCode;
	}
	else if($event.which) { // Netscape/Firefox/Opera
		var $key_code = $event.which;
	}

	switch ($key_code) {
		case 13:
			search($prefix_special, $grid);
			break;

		case 27:
			search_reset($prefix_special, $grid);
			break;

	}
}

function move_selected($from_list, $to_list)
{
	if (typeof($from_list) != 'object') $from_list = document.getElementById($from_list);
	if (typeof($to_list) != 'object') $to_list = document.getElementById($to_list);

	if (has_selected_options($from_list)) {
		var $from_array = select_to_array($from_list);
		var $to_array = select_to_array($to_list);
		var $new_from = Array();
		var $cur = null;

		for (var $i = 0; $i < $from_array.length; $i++) {
			$cur = $from_array[$i];
			if ($cur[2]) {// If selected - add to To array
				$to_array[$to_array.length] = $cur;
			}
			else {//Else - keep in new From
				$new_from[$new_from.length] = $cur;
			}
		}

		$from_list = array_to_select($new_from, $from_list);
		$to_list = array_to_select($to_array, $to_list);
	}
}

function move_all($from_list, $to_list) {
	if (typeof($from_list) != 'object') $from_list = document.getElementById($from_list);
	if (typeof($to_list) != 'object') $to_list = document.getElementById($to_list);

	var $from_array = select_to_array($from_list);
	var $to_array = select_to_array($to_list);
	var $new_from = Array();
	var $cur = null;

	for (var $i = 0; $i < $from_array.length; $i++) {
		$cur = $from_array[$i];
		$to_array[$to_array.length] = $cur;
	}

	$from_list = array_to_select($new_from, $from_list);
	$to_list = array_to_select($to_array, $to_list);
}

function has_selected_options($theList)
{
	var $ret = false;
	var $cur = null;

	for (var $i = 0; $i < $theList.length; $i++)
	{
		$cur = $theList.options[$i];
		if ($cur.selected) $ret = true;
	}
	return $ret;
}

function select_to_array($aSelect)
{
	var $an_array = new Array();
	var $cur = null;

	for (var $i = 0; $i < $aSelect.length; $i++)
	{
		$cur = $aSelect.options[$i];
		$an_array[$an_array.length] = new Array($cur.text, $cur.value, $cur.selected);
	}
	return $an_array;
}

function array_to_select($anArray, $aSelect)
{
	var $initial_length = $aSelect.length;
	for (var $i = $initial_length - 1; $i >= 0; $i--)
	{
		$aSelect.options[$i] = null;
	}

	for (var $i = 0; $i < $anArray.length; $i++)
	{
		$cur = $anArray[$i];
		$aSelect.options[$aSelect.length] = new Option($cur[0], $cur[1]);
	}
}

function array_search(needle, haystack)
{
	for (var i=0; i<haystack.length; i++)
	{
		if (haystack[i] == needle) return i;
	}
	return -1;
}

String.prototype.trim = function() {
	return this.replace(/^[ \t\r\n]/g, '').replace(/[ \t\r\n]$/g, '');
};

function auto_close() {
	window.opener.location.href = window.opener.location.href;
	window.close();
	window.opener.focus();
}

function toggle_box($id, $btn_image) {
	var $div_body = document.getElementById($id);
	var $status_button = document.getElementById($id + '_button');
	if ($div_body.style.display == 'block') {
		$status_button.src = $btn_image + 'small.gif';
		$div_body.style.display = 'none';
	}
	else {
		$status_button.src = $btn_image + 'big.gif';
		$div_body.style.display = 'block';
	}
}

function ismaxlength(obj){
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
	document.getElementById('ml_value').innerHTML = obj.value.length;
	if (obj.getAttribute && obj.value.length>mlength) {
		document.getElementById('ml_value').innerHTML = mlength;
		obj.value=obj.value.substring(0,mlength)
	}
}

function getSelectedCount(sPrefix, sIdField)
{
	var iCount = 0;
	var aInputs = document.getElementsByTagName("input");
	var rePattern = new RegExp(sPrefix + "\\[\\d+\\]\\[" + sIdField + "\\]");
	for (var i = 0; i < aInputs.length; i++) {
		if (aInputs[i].type == "checkbox" && aInputs[i].checked && aInputs[i].name.match(rePattern)) {
			iCount++;
		}
	}
	return iCount;
}

//----------------------------------------- PennyDocSpecific

function submit_question()
{
	if (document.kernel_form.question.value == '')
	{
		alert('Please, type some question');
		return;
	}
	document.kernel_form.elements['events[u.current]'].value="OnSubmitQuestion";
	document.kernel_form.submit();
}

function submit_search()
{
	if (document.kernel_form.keyword.value == '')
	{
		alert('Please, type some keyword for search');
		return;
	}
	document.kernel_form.elements['events[u.current]'].value="OnSubmitSearch";
	document.kernel_form.submit();
}

function resort_grid($prefix_special, $field)
{
//	set_form($prefix_special, $ajax);
	set_hidden_field($prefix_special + '_Sort1', $field);
	submit_event($prefix_special, 'OnSetSorting');
}

function go_to_page($prefix_special, $page, $ajax)
{
	set_hidden_field($prefix_special + '_Page', $page);
	submit_event($prefix_special, null, null, null, $ajax);
}

function select_to_string($aSelect)
{
	var $result = '';
	var $cur = null;

	if (typeof($aSelect) != 'object') $aSelect = document.getElementById($aSelect);

	for (var $i = 0; $i < $aSelect.length; $i++)
	{
		$result += $aSelect.options[$i].value + '|';
	}

	return $result.length ? '|' + $result : '';
}

function go_topic(topic)
{
	document.kernel_form.library_topic.value = topic;
	submit_event("question", "onGoLibraryTopic");
}

function go_categoryaz(category)
{
	document.kernel_form.library_category.value = category;
	submit_event("question", "OnChangeLibraryCategoryAZ");
}

function togglediv(frm_div, to_div)
{
	document.getElementById(frm_div).style.display = "none";
	document.getElementById(to_div).style.display = "block";
}

function update_multiple_options($hidden_id) {
	var $select = document.getElementById($hidden_id + '_select');
	var $result = '';
	
	for (var $i = 0; $i < $select.options.length; $i++) {
		if ($select.options[$i].selected) {
			$result += $select.options[$i].value + '|';
		}
	}
	document.getElementById($hidden_id).value = $result ? '|' + $result : '';
}

