class JavascriptPage
  include PageObject

  text_field(:expression, :id => 'calculator-expression')
  text_field(:results, :id => 'calculator-result')
  button(:compute, :value => 'Compute')

end

def build_url(page)
  target = ENV['BROWSER']
  return "http://localhost:4567/#{page}" if target.nil? or target.include? 'local'
  "http://ec2-107-22-131-88.compute-1.amazonaws.com:4567/#{page}"
end

Given /^I am on jQuery example page$/ do
  PageObject.javascript_framework = :jquery
  @page = JavascriptPage.new(@browser)
  @page.navigate_to build_url("jquery.html")
end

Given /^I am on the Prototype example page$/ do
  PageObject.javascript_framework = :prototype
  @page = JavascriptPage.new(@browser)
  @page.navigate_to build_url('prototype.html')
end

When /^I ask to compute "([^\"]*)"$/ do |expression|
  @page.expression = expression
  @page.compute
end

Then /^I should be able to wait for the answer "([^\"]*)"$/ do |answer|
  @page.wait_for_ajax
  expect(@page.results).to eql answer
end

Given /^I execute the javascript "([^\"]*)"$/ do |script|
  @answer = @page.execute_script script
end

Given /^I execute the javascript "([^\"]*)" with an argument of "([^\"]*)"$/ do |script, arg|
  @answer = @page.execute_script script, arg
end

Given /^I execute the javascript "([^\"]*)" with a text field argument$/ do |script|
  text_field = @page.text_field_element(:id => 'text_field_id')
  @page.execute_script(script, text_field)
end

Then /^I should get the answer "([^\"]*)"$/ do |answer|
  expect(@answer).to eql answer.to_i
end