function popup(url,width,height,windowID) {
  if (!windowID)
      windowID = "centered_window";
  var scrheight=screen.availHeight;
  var scrwidth=screen.availWidth;
  var winwidth=width;
  var winheight=height;
  var leftpos= (scrwidth/2)-(winwidth/2);
  var toppos = (scrheight/2)-(winheight/2);
  var windowName = window.open(url,"window"
          , "height=" + winheight
          + ",width=" + winwidth
          + ",left=" + leftpos
          + ",top=" + toppos
          + ", status=0, modal=yes, scrollbars=yes" );

  if (!windowName) {
      alert("Error. cannot open a new window");
      return false;
  }
  else {
      windowName.focus();
      return windowName;
  }
}

function autoTab(e)
{
	e = e || window.event;
  if (e.keyCode==0 || e.keyCode==8 || e.keyCode==9
		|| e.keyCode==16 || e.keyCode==17 || e.keyCode==18
    || e.keyCode==37 || e.keyCode==38 || e.keyCode==39
    || e.keyCode==40 || e.keyCode==46)
    return;
  var inputEl = e.target || e.srcElement;
	var len = inputEl.maxLength ;
	if(inputEl.value.length >= len )
	{
		var nextEl = null;
	  for (var i=0; i < inputEl.form.length ; i++)
	  {
			nextEl = inputEl.form[i+1];
	    if (nextEl && nextEl.type!="hidden" && inputEl.form[i] == inputEl )
	    {
				if (nextEl.type=="text")
					nextEl.select();
				nextEl.focus();
			  break;
			}
		}
	}
}

function imgPreload(url) {
	var newImage = new Image();
	newImage.src = url;
	document.images[document.images.length] = newImage;
}

function imgSwitch(elId,img1)
{
	document.getElementById(elId).src = img1;
}

function imgRollover(elId,img1,img2)
{
	var el= document.getElementById(elId);
	el.onmouseover =function(){this.src=img1;}
	el.onmouseout  =function(){this.src=img2;}
}

function validateHandset(hsid)
{
		var device = document.getElementById(hsid).value;
		if (device =='')
		{
			 alert("Please select your handset.");
			 document.getElementById(hsid).focus();
			 return false;
		}
    return true;
}


function enable_submit(elId)
{
	$(elId).style.cursor='hand';
	$(elId).style.cursor='pointer';
	$(elId).disabled=false;
}

function disable_submit(elId)
{
	$(elId).style.cursor='wait';
	$(elId).disabled=true;
}

function popUnder(url, name, width, height)
{
	regExp = new RegExp("/[0-9]+/g");

	if (!regExp.test(width) || !regExp.test(height))
		width=700;height=700;

	window.open(url, name, "width="+width+",height="+height+",scrollbars=yes");
	self.focus();
}

/**
 * We assume in the view we have
 * 1) <div id='ringtone_div'></div> as flash container
 * 2) the preview image id is "prev_x", x is int from 0 to song total -1
 * 3) obj_id is the flashvar
 *
 * @param tone - string: object id
 * @param prev_btn_id - string: clicked preview button image id
 * @param prev_img - string: image name. eg. "preview_button.gif"
 * @param stop_img - string: image name. eg. "stop_button.gif"
 * @param mp3_player - string: flash file name. eg. "preview.swf"
 * @param song_count - int: numbers of song list
 */
function play_ringtone(tone, prev_btn_id, prev_img, stop_img, mp3_player, song_count)
{
	var ring_div = document.getElementById('ringtone_div');
	if (ring_div==null)
	{
		return false;
	}

  //stop playing the current one
  ring_div.innerHTML = "";

	var btn = document.getElementById(prev_btn_id);
	if (btn==null)
	{
		return false;
	}

	results = btn.src.split("/images/");
	if(results[1] == prev_img)
	{
		//clicked on "preview" preview button, now play it
		ring_div.innerHTML = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="1" height="1" id="mp3_player" align="middle">'+
						 '<param name="allowScriptAccess" value="sameDomain" />'+
						 '<param name="movie" value="images/'+mp3_player+'" />'+
						 '<param name="quality" value="high" />'+
						 '<param name="bgcolor" value="#ffffff" />'+
						 '<PARAM NAME=FlashVars VALUE="obj_id='+tone+'">'+
						 '<embed src="images/'+mp3_player+'" FlashVars="obj_id='+tone+'" quality="high" bgcolor="#ffffff" width="1" height="1" name="mp3_player" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'+
						 '</object>';

		//update preview button
		for(var x=0; x<song_count; x++)
		{
			var tmp_prev_id='prev_'+x;
			if(tmp_prev_id != prev_btn_id)
			{
				//set the other preview buttons to "preview" preview button
				tmp_btn = document.getElementById(tmp_prev_id);
				if (tmp_btn==null)
				{
					continue;
				}
				tmp_btn.src="images/"+prev_img;
			}
			else
			{
				//set the clicked preview button to "stop" preview button
				btn.src="images/"+stop_img;
			}
		}
	}
	else
	{
		//clicked on "stop" preview button, change to "preview" preview button
		btn.src="images/"+prev_img;
	}
	return false;
}

function compliance_terms_switch()
{
	$('dataindex_terms_DISPLAY_ELEMENT_CHECKBOX').checked=!$('dataindex_terms_DISPLAY_ELEMENT_CHECKBOX').checked;
	dataindex_terms_DISPLAY_ELEMENT_CHECKBOX_CHANGE($('dataindex_terms_DISPLAY_ELEMENT_CHECKBOX'));
}

function compliance_terms_switch_google()
{
	$('dataindexgoogle_terms_DISPLAY_ELEMENT_CHECKBOX').checked=!$('dataindexgoogle_terms_DISPLAY_ELEMENT_CHECKBOX').checked;
	dataindexgoogle_terms_DISPLAY_ELEMENT_CHECKBOX_CHANGE($('dataindexgoogle_terms_DISPLAY_ELEMENT_CHECKBOX'));
}

var Mobile = Class.create();
Object.extend(Mobile.prototype, {
	initialize: function(form, model, options) {

		this.form = $(form);
		this.model = model;
		this.fieldPrefix = this.model.toLowerCase() + "_";
		this.options = Object.extend({
			pageErrorId: "error_div"
		}, options || {});

		this._initializeForm();
		this.formElement = new FormElement(form, model, options);
	},
	_initializeForm: function() {
		if($(this.fieldPrefix + "handset")) {
			this._addHandsetValidation()
		}

		var compliance = $A(document.getElementsByClassName('google', $("sm2form")))
		for(var i = 0; compliance[i]; i++) {
			Event.observe(compliance[i], "click", this._google_compliance.bind(this));
		}

		if(this.options.counter) {
			this.countdown();
		}

		if($("compliance_div")) {
			this._get_carrier();
			Event.observe(this.form, "keyup", this._get_carrier.bind(this));
		}
	},
	_addHandsetValidation: function() {
		FormElement.prototype.getErrors = function() {
	
			var query = 'class_name=' + this.model + '&' + Form.serialize(this.form);
			this.transport = Ajax.getTransport();
			this.transport.open('post', this.options.url, false);
			this.transport.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			this.transport.setRequestHeader('Content-length', query.length);
			this.transport.setRequestHeader('Connection', 'close');
			this.transport.send(query);
	
			var response = eval(this.transport.responseText);
			var errors   = {
				elements: [],
				messages: []
			};
	
			for(var i = 0; response[i]; i++) {
				for(var j = 0; j < response[i].columns.length; j++) {
					if(response[i].columns[j]) {
						if(this.elementGroups[response[i].columns[j]]) {
							for(var k = 0; this.elementGroups[response[i].columns[j]][k]; k++) {
								errors.elements.push(this.elementGroups[response[i].columns[j]][k])
							}
						} else {
							errors.elements.push(response[i].columns[j]);
						}
					}
					if (errors.messages.indexOf(response[i].message)== -1) {
						errors.messages.push(response[i].message);
					}
				}
			}

			var device = $(this.model.toLowerCase() + "_"+ "handset");
			if (device && device.value == "") {
				errors.elements.push(device.id);
				errors.messages.push("Please select a handset.");
			}
	
			return errors;
		}
	},
	_google_compliance: function(event) {
		var element = Event.element(event);
		if(["a", "input"].indexOf(element.tagName.toLowerCase()) == -1) {
			$(this.fieldPrefix + "terms").checked = !$(this.fieldPrefix + "terms").checked;
		}
	},
	countdown: function() {
		var field = $(this.options.counter);
		if(parseInt(field.innerHTML) <= 0) {
			clearTimeout(timer)
		} else {
			field.innerHTML = parseInt(field.innerHTML) - 1;
			timer = setTimeout(this.countdown.bind(this), 1000);
		}
	},
	_get_carrier: function() {
		var phone = "";
		for (i = 0; i < 3; i++) {
			phone += $(this.fieldPrefix + 'phone_' + i).value;
		}
		if (phone.length == 10 || phone.length == 0) {
			new Ajax.Updater('compliance_div','carrier_lookup?msisdn='+phone);
		}
	}
});
