var modes_file = "index1.php", actions_file = "index2.php",
 default_container = "content", current_page = {mode: "", page: 0};

function add_editors(form)
{
 var forms = form ? [form] : document.forms, element, id;
 for (var i = 0; i < forms.length; i++)
  for (var j = 0; j < forms[i].elements.length; j++)
  {
   element = forms[i].elements[j];
   switch (element.className)
   {
    case 'date_editor':
     Calendar.setup({ inputField: element, ifFormat: "%Y-%m-%d %H:%M:%S", showsTime: true, cache: true, showOthers: true });
     element.className += '_';
    break;
    case 'text_editor':
     id = element.id || (element.id = "tiny_mce_" + rand(1, 999999));
     tinyMCE.execCommand('mceAddControl',false,id);
     element.className += '_';
    break;
   }
  }
 return false;
}

function remove_editors(form)
{
 var forms = form ? [form] : document.forms, element, id;
 for (var i = 0; i < forms.length; i++)
  for (var j = 0; j < forms[i].elements.length; j++)
  {
   element = forms[i].elements[j];
   if (element.className == 'text_editor_' && (id = element.id))
    tinyMCE.execCommand('mceRemoveControl',false,id);
  }
 return false;
}

function open_page(get, post, win, onsuccess, onerror)
{
 var container;
 if (win && (container = win.get_element("content")))
  win.current_page = get;
 else
 {
  container = $(default_container);
  current_page = get;
 }
 load_url(modes_file + (get ? "?" + url_encode_array(get) : ""), url_encode_array(post), container,
  function(request)
  {
   add_editors();
   if (onsuccess) onsuccess(request);
  }, onerror);
 return false;
}

function open_new_page(get, post, onsuccess, onerror)
{
 var w = new jswindow();
 if (get.mode) w.set_caption(get.mode);
 w.get_element("buttons").childNodes[0].innerHTML = "<img src=\"files/images/window-close.gif\" alt=\"Close\" border=\"0\" />";
 open_page(get, post, w, function(request) {
  w.center();
  if (onsuccess) onsuccess(request);
 }, onerror);
 w.center();
 return false;
}

function popup_my_window(title, get, post, onsuccess, onerror)
{
 var w = new my_jswindow();
 w.get_element("buttons").childNodes[0].innerHTML = "<img src=\"files/images/window-close.gif\" alt=\"Close\" border=\"0\" />";
 load_url(get, post, w.get_element("content"), function(request) {
  w.center(); w.set_caption(title);
  if (onsuccess) onsuccess(request);
 }, onerror);
 w.center();
 return false;
}

function refresh_page(variables, win, onsuccess, onerror)
{
 var page;
 if (win)
 {
  if (variables)
   for (var i in variables)
    win.current_page[i] = variables[i];
  open_page(win.current_page, null, win, onsuccess, onerror);
 }
 else
 {
  if (variables)
   for (var i in variables)
    current_page[i] = variables[i];
  open_page(current_page, null, null, onsuccess, onerror);
 }
 return false;
}

function edit_record(get, post, win, onsuccess, onerror)
{
 if (win && win.current_page)
  for (var i in win.current_page)
   if (typeof get[i] == "undefined")
    get[i] = win.current_page[i];
 var w = new jswindow();
 w.parent = win;
 if (get.mode) w.set_caption(get.mode);
 w.get_element("buttons").childNodes[0].innerHTML = "<img src=\"files/images/window-close.gif\" alt=\"Close\" border=\"0\" />";
 load_url(actions_file + (get ? "?" + (typeof get == "object" ? url_encode_array(get) : get) : ""),
  typeof post == "object" ? url_encode_array(post) : post,
  w.get_element("content"), function(request) {
  w.center();
  add_editors();
  if (onsuccess) onsuccess(request);
 }, onerror);
 w.center();
 return false;
}

function delete_record(get, post, win, onsuccess, onerror)
{
 if (win && win.current_page)
  for (var i in win.current_page)
   if (typeof get[i] == "undefined")
    get[i] = win.current_page[i];
 if (confirm("Delete this item?"))
 {
  ajax_request({
   url: actions_file + (get ? "?" + (typeof get == "object" ? url_encode_array(get) : get) : ""),
   post: typeof post == "object" ? url_encode_array(post) : post,
   onsuccess: function(request) {
    refresh_page(null, win);
    if (request.responseText) alert(request.responseText);
    if (onsuccess) onsuccess(request);
   },
   onerror: function(request) {
    alert("Error " + request.status + ": " + request.statusText);
    if (onerror) onerror(request);
   }
  });
 }
 return false;
}

function save_form(form, onsuccess, onerror)
{
 var w = get_parent_window(form);
 var c = w && w.get_element("content") || form.parentNode;
 remove_editors(form);
 submit_form(form, c, function(request) {
  if (w)
  {
   c = c && c.innerHTML || "";
   w.close();
   if (c) alert(c);
   else refresh_page(null, w = w && w.parent, function() { if (w) w.center(); });
  }
  if (onsuccess) onsuccess(request);
 }, onerror);
 w.center();
 return false;
}

function format_price(value, integer)
{
 return round(floatval(value), integer ? 0 : 2).toFixed(integer ? 0 : 2).replace(/(\d)(?=(\d{3})+([^\d]|$))/g, "$1&nbsp;");
}

function count_words(text, length)
{
 if (!length) length = 1;
 text = text.split(/\s+/);
 var words = 0;
 for (i = 0; i < text.length; i++)
  if (text[i].length >= length)
   words++;
 return words;
}

function switch_order_type(form, simple)
{
 function switch_row(element, visible)
 {
  while (element && element.nodeName != "TR")
   element = element.parentNode;
  if (element)
   if (visible) show(element);
   else hide(element);
 }
 var category = form.elements.category.value, pricelist, servicelist;
 var type = (form.elements.type.value.split('-'))[0];
 if (category == "essay")
 {
  pricelist = essay_pricelist;
  servicelist = essay_servicelist;
  switch (intval(type))
  {
   case 0: // essay
   case 1: // dissertation
    //switch_row(form.elements.spacing, true);
    switch_row(form.elements.pages, true);
    switch_row(form.elements.text, false);
    switch_row(form.elements.summary, true);
    switch_row(form.elements.sources, true);
   break;
   case 2: // formatting
   case 3: // editing
   case 4: // proofreading
    //set_select_value(form.elements.spacing, 2);
    //switch_row(form.elements.spacing, false);
    switch_row(form.elements.pages, false);
    switch_row(form.elements.text, true);
    switch_row(form.elements.summary, false);
    switch_row(form.elements.sources, false);
   break;
  }
 }
 else if (category == "resume")
 {
  pricelist = resume_pricelist;
  servicelist = resume_servicelist;
  if (pricelist[type]["page"])
  {
   switch_row(form.elements.pages, true);
  }
  else
  {
   set_select_value(form.elements.pages, 1);
   switch_row(form.elements.pages, false);
  }
 }
 set_table_classes($("personal_information"), ["tr1", "tr2"]);
 set_table_classes($("paper_information"), ["tr1", "tr2"]);
 var v = form.elements.urgency.value;
 set_select_options(form.elements.urgency, pricelist[type]["urgencies"]);
 set_select_value(form.elements.urgency, v);
 v = form.elements.level.value;
 set_select_options(form.elements.level, pricelist[type]["levels"]);
 set_select_value(form.elements.level, v);
 if (!simple) calculate_price(form);
}

function count_order_pages(form)
{
 var spacing = intval(form.elements.spacing.value);
 var text = form.elements.text.value;
 var words = count_words(text, 3);
 var pages = Math.ceil(words / (2 / spacing * 300));
 set_content($("words_and_pages"), words + " word" + (words != 1 ? "s" : "") + ", " + pages + " page" + (pages != 1 ? "s" : ""));
 set_select_value(form.elements.pages, pages || 1);
 //calculate_price(form);
}

function calculate_price(form)
{
 var category = form.elements.category.value, pricelist, servicelist;
 var type = (form.elements.type.value.split('-'))[0];
 switch (category)
 {
  case "essay":
   pricelist = essay_pricelist;
   servicelist = essay_servicelist;
   if (in_array([2, 3, 4], type)) count_order_pages(form);
  break;
  case "resume":
   pricelist = resume_pricelist;
   servicelist = resume_servicelist;
  break;
 }
 var urgency = intval(form.elements.urgency.value);
 var level = intval(form.elements.level.value);
 var spacing = intval(form.elements.spacing.value) == 2 ? 1 : 2;
 var currency = form.elements.currency.value;
 var rate = floatval(form.elements.rate.value);
 var pages = intval(form.elements.pages.value);
 var services = 0, l = servicelist.length;
 if (category == "resume")
  for (var i = 0; i < pricelist.length; i++)
   for (var j = 0; j < pricelist[i]["types"].length; j++)
    set_content($("price_" + i + "_" + j), format_price(round((pricelist[i]["prices"][urgency][level] + pricelist[i]["page"] * pages * spacing) * rate, 2)) + " " + currency);
 for (var i = 0; i < l; i++)
 {
  var p = round(floatval(servicelist[i].price) * rate, 2);
  if ((l > 1 ? form.elements["services[]"][i] : form.elements["services[]"]).checked) services += p;
  set_content($("service" + i + "_price"), p ? format_price(p) + " " + currency : "FREE");
 }
 var language = form.elements.language[0].checked ? 1 : 1.05;
 switch (category)
 {
  case "essay":
   var price = round(pricelist[type]["prices"][urgency][level] * spacing * rate, 2);
   set_content($("page_price"), price ? format_price(price) + " " + currency : "&minus;");
   set_content($("total_price"), price ? format_price(round((price * pages + services) * language, 2)) + " " + currency : "&minus;");
  break;
  case "resume":
   var price = round((pricelist[type]["prices"][urgency][level] + pricelist[type]["page"] * pages * spacing) * rate, 2);
   set_content($("total_price"), price ? format_price(round((price + services) * language, 2)) + " " + currency : "&minus;");
  break;
 }
}

function update_price_calculator(form, switch_type)
{
 var category = form.elements.category.value, pricelist, servicelist;
 switch (category)
 {
  case "essay":
   pricelist = essay_pricelist;
   servicelist = essay_servicelist;
  break;
  case "resume":
   pricelist = resume_pricelist;
   servicelist = resume_servicelist;
  break;
 }
 var type = intval(form.elements.type.value);
 if (switch_type)
 {
  var v = form.elements.urgency.value;
  set_select_options(form.elements.urgency, pricelist[type]["urgencies"]);
  set_select_value(form.elements.urgency, v);
  v = form.elements.level.value;
  set_select_options(form.elements.level, pricelist[type]["levels"]);
  set_select_value(form.elements.level, v);
 }
 var urgency = intval(form.elements.urgency.value);
 var level = intval(form.elements.level.value);
 var spacing = intval(form.elements.spacing.value) == 2 ? 1 : 2;
 var currency = '$';
 var rate = 1;
 var pages = intval(form.elements.pages.value);
 switch (category)
 {
  case "essay":
   var price = round(pricelist[type]["prices"][urgency][level] * spacing * rate, 2);
   set_content($("sidebar_page_price"), price ? format_price(price) + " " + currency : "&minus;");
   set_content($("sidebar_total_price"), price ? format_price(round(price * pages, 2)) + " " + currency : "&minus;");
  break;
  case "resume":
   var price = round((pricelist[type]["prices"][urgency][level] + pricelist[type]["page"] * pages * spacing) * rate, 2);
   set_content($("sidebar_total_price"), price ? format_price(round(price, 2)) + " " + currency : "&minus;");
  break;
 }
}

function make_table(attributes, cells)
{
 var result = "<table";
 if (attributes)
  for (var a in attributes)
   result += " " + a + "=\"" + attributes[a] + "\"";
 result += ">\n";
 if (cells)
  for (var r = 0; r < cells.length; r++)
  {
   result += " <tr>\n";
   for (var c = 0; c < cells[r].length; c++){
      if(r) result += "  <td>" + cells[r][c] + "</td>\n";
	  else result += "  <th>" + cells[r][c] + "</th>\n";
   }
   result += " </tr>\n";
  }
 result += "</table>";
 return result;
}

function calculate_prices(form)
{
 var category = form.elements.category.value, pricelist, servicelist;
 switch (category)
 {
  case "essay":
   pricelist = essay_pricelist;
   servicelist = essay_servicelist;
  break;
  case "resume":
   pricelist = resume_pricelist;
   servicelist = resume_servicelist;
  break;
 }
 var type = intval(form.elements.type.value);
 var spacing = intval(form.elements.spacing.value) == 2 ? 1 : 2;
 var currency = form.elements.currency.value;
 var rate = floatval(form.elements.rate.value);
 var pages = intval(form.elements.pages.value);
 var urgencies = pricelist[type].urgencies, levels = pricelist[type].levels, prices = pricelist[type].prices;
 var table = [], r = 0, c = 0;
 table[0] = ["<strong>Academic level / Timeframe</strong>"];
 for (var i in levels)
  table[0].push("<span class=\"orange\">" + levels[i] + "</span>");
 for (var i in urgencies)
 {
  r++; c = 0;
  table[r] = ["<span class=\"right\">" + urgencies[i] + "</span>"];
  for (var j in levels)
  {
   c++;
   table[r][c] = prices[i][j] ? format_price(prices[i][j] * pages * rate) + "&nbsp;" + currency : "&minus;";
  }
 }
 set_content($("essay_calculator"), make_table({"id": "table_essay_calculator", "class": "table_price", "border": "0", "width": "100%", "style": "border-collapse:collapse"}, table));
 set_table_classes($("table_essay_calculator"), ["tr1", "tr2"]);
}

function verify_order_form(form)
{
 var fields = get_fields(form), required = ["firstname", "lastname", "email1", "phone1", "topic"], ok = true;
 for (var i in required)
  if (!fields[required[i]])
  {
   ok = false;
   add_class(form.elements[required[i]], "error");
  }
 if (fields["password"] != fields["confirm"])
 {
  ok = false;
  add_class(form.elements["confirm"], "error");
 }
 if (!ok) alert("Please fill all required fields");
 return ok;
}

function update_payment_amount(form)
{
 var r = floatval(form.elements.rate.value),
  b = round(floatval(form.elements.bonus.value), 2),
  p = round(floatval(form.elements.price.value), 2),
  f = round(floatval(form.elements.free.value), 2);
 if (f < 0) f = 0; else
 if (f > b) f = b;
 if (form.elements.free.value && floatval(form.elements.free.value) != f)
  form.elements.free.value = f;
 p = round(p - f, 2);
 set_content($("free_amount"), round(f * r, 2));
 set_content($("payment_amount"), round(p * r, 2));
 form.elements.submit.disabled = p ? true : false;
 if (document.forms.swreg)
 {
  document.forms.swreg.elements.vp.value = p;
  for (var i in document.forms.swreg.elements)
   if (document.forms.swreg.elements[i].type == "submit")
    document.forms.swreg.elements[i].disabled = !p;
 }
 if (document.forms.plimus)
 {
  document.forms.plimus.elements.overridePrice.value = p;
  for (var i in document.forms.plimus.elements)
   if (document.forms.plimus.elements[i].type == "submit")
    document.forms.plimus.elements[i].disabled = !p;
 }
 return false;
}

function plagiarism_check(id, key)
{
 var f = document.forms.form_plagiarism;
 if (f && confirm("Now you will be redirected to our partners' plagiarism checking site.\n" +
  "Please copy and paste your paper text in the provided form.\n" +
  "If you have checked this paper before, you can view it's statistics.\n" +
  "Continue?"))
 {
  f.elements.name.value = name;
  f.elements.email.value = email;
  f.elements.id_order.value = id;
  f.elements.key.value = key;
  f.submit();
 }
 return false;
}

function init(mode)
{
 if (mode.indexOf("buy-") == 0) mode = "dissertation";
 switch (mode)
 {
  case "contacts":
  case "inquiry":
  case "suggestions":
   load_url(mode + "_form.php", null, $("ajax_content"));
  break;
  case "prices":
   load_url(mode + ".php", null, $("ajax_content"), function() { calculate_prices(document.forms.essay_calculator); });
  break;
  case "editing":
   load_url("order.php", "type=3-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "dissertation":
   load_url("order.php", "type=1-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "abstract":
   load_url("order.php", "type=1-2", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "introduction-chapter":
   load_url("order.php", "type=1-3", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "literature-review":
   load_url("order.php", "type=1-5", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "methodology":
   load_url("order.php", "type=1-6", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "results":
   load_url("order.php", "type=1-7", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "discussion":
   load_url("order.php", "type=1-8", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "research-proposal":
   load_url("order.php", "type=0-6", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "thesis":
   load_url("order.php", "type=1-1", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "thesis-proposal":
   load_url("order.php", "type=1-10", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "proofreading":
   load_url("order.php", "type=4-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "formatting":
   load_url("order.php", "type=2-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "academic-services":
   load_url("order.php", "type=1-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "editing-and-proofreading-service":
   load_url("order.php", "type=3-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "discussion-section-writing":
   load_url("order.php", "type=1-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "conclusion-writing":
   load_url("order.php", "type=1-0", $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  case "analysis-and-data-presentation":
   load_url("order.php", arguments[1], $("ajax_content"), function() { var form = document.forms.order; if (form) switch_order_type(form);});
  break;
  /******************/
  case "profile":
  case "password":
  case "login":
   load_url(mode + ".php", null, $("ajax_content"));
  break;
  case "orders":
   if (arguments[1])
   {
    var a = arguments[1];
    load_url(mode + ".php?mode=details&" + a, null, $("ajax_content"), function() {
     load_url(mode + ".php?mode=orderinfo&" + a, null, $("ajax_orderinfo"));
     load_url(mode + ".php?mode=files&" + a, null, $("ajax_orderfiles"));
     load_url(mode + ".php?mode=messages&" + a, null, $("ajax_ordermessages"), function() { add_editors(document.forms.send_message); });
    });
   }
   else load_url(mode + ".php", null, $("ajax_content"));
  break;
 }
}
